25 namespace SourceXtractor {
30 : m_source(source), m_tile_manager(tile_manager) {}
42 return "BufferedImage(" + m_source->getRepr() +
")";
47 assert(x >= 0 && y >= 0 && x < m_source->getWidth() && y < m_source->getHeight());
49 if (m_current_tile ==
nullptr || !m_current_tile->isPixelInTile(x, y)) {
50 m_current_tile = m_tile_manager->getTileForPixel(x, y, m_source);
53 return m_current_tile->getValue(x, y);
59 return m_source->getWidth();
65 return m_source->getHeight();
71 int tile_width = m_tile_manager->getTileWidth();
72 int tile_height = m_tile_manager->getTileHeight();
73 int tile_offset_x = x % tile_width;
74 int tile_offset_y = y % tile_height;
77 if (tile_offset_x + width <= tile_width && tile_offset_y + height <= tile_height) {
81 auto tile = m_tile_manager->getTileForPixel(x, y, m_source);
83 const T *data_start = &(tile->getImage()->getData()[tile_offset_x +
84 tile_offset_y * tile->getImage()->getWidth()]);
85 return ImageChunk<T>::create(data_start, width, height, tile->getImage()->getWidth(), tile->getImage());
93 int tile_w = m_tile_manager->getTileWidth();
94 int tile_h = m_tile_manager->getTileHeight();
96 int tile_start_x = x / tile_w * tile_w;
97 int tile_start_y = y / tile_h * tile_h;
98 int tile_end_x = (x + width - 1) / tile_w * tile_w;
99 int tile_end_y = (y + height - 1) / tile_h * tile_h;
101 for (
int iy = tile_start_y; iy <= tile_end_y; iy += tile_h) {
102 for (
int ix = tile_start_x; ix <= tile_end_x; ix += tile_w) {
103 auto tile = m_tile_manager->getTileForPixel(ix, iy, m_source);
104 copyOverlappingPixels(*tile, data, x, y, width, height, tile_w, tile_h);
115 int x,
int y,
int w,
int h,
116 int tile_w,
int tile_h)
const {
121 int off_x = start_x -
x;
122 int off_y = start_y -
y;
124 for (
int data_y = off_y, img_y = start_y; img_y < end_y; ++data_y, ++img_y) {
125 for (
int data_x = off_x, img_x = start_x; img_x < end_x; ++data_x, ++img_x) {
126 output[data_x + data_y * w] = tile.
getValue(img_x, img_y);
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > x
std::shared_ptr< DependentParameter< std::shared_ptr< EngineParameter > > > y