28 : m_source(source), m_tile_manager(tile_manager) {}
40 return "BufferedImage(" + m_source->getRepr() +
")";
46 return m_source->getWidth();
52 return m_source->getHeight();
58 int tile_width = m_tile_manager->getTileWidth();
59 int tile_height = m_tile_manager->getTileHeight();
60 int tile_offset_x =
x % tile_width;
61 int tile_offset_y =
y % tile_height;
64 if (tile_offset_x + width <= tile_width && tile_offset_y + height <= tile_height) {
68 auto tile = std::dynamic_pointer_cast<ImageTileWithType<T>>(m_tile_manager->getTileForPixel(
x,
y, m_source));
69 assert(tile !=
nullptr);
72 auto image = tile->getImage();
73 return image->getChunk(tile_offset_x, tile_offset_y, width, height);
81 int tile_w = m_tile_manager->getTileWidth();
82 int tile_h = m_tile_manager->getTileHeight();
84 int tile_start_x =
x / tile_w * tile_w;
85 int tile_start_y =
y / tile_h * tile_h;
86 int tile_end_x = (
x + width - 1) / tile_w * tile_w;
87 int tile_end_y = (
y + height - 1) / tile_h * tile_h;
89 for (
int iy = tile_start_y; iy <= tile_end_y; iy += tile_h) {
90 for (
int ix = tile_start_x; ix <= tile_end_x; ix += tile_w) {
91 auto tile = std::dynamic_pointer_cast<ImageTileWithType<T>>(m_tile_manager->getTileForPixel(ix, iy, m_source));
92 copyOverlappingPixels(*tile, data,
x,
y, width, height, tile_w, tile_h);
103 int x,
int y,
int w,
int h,
104 int tile_w,
int tile_h)
const {
109 int off_x = start_x -
x;
110 int off_y = start_y -
y;
112 for (
int data_y = off_y, img_y = start_y; img_y < end_y; ++data_y, ++img_y) {
113 for (
int data_x = off_x, img_x = start_x; img_x < end_x; ++data_x, ++img_x) {
114 tile.
getValue(img_x, img_y, output[data_x + data_y * w]);
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y