如何解决如何迭代行对齐像素的子集
unsigned int *data_; // bgra buffer described by
// image_.ximage_->width and
// image_.ximage_->height
我有兴趣对图像中的子图像进行采样。子图像由原点和高度和宽度定义:
struct Box {
unsigned int x_;
unsigned int y_;
unsigned int width_;
unsigned int height_;
};
我正在像这样走子图像::
unsigned int *origin,p;
origin = data_ + ((image_.ximage_->width * Box.y_) + Box.x_);
for( unsigned int j = 0 ; j < Box.height_; ++j )
{
p = origin + (image_.ximage_->width * j);
for( unsigned int i = 0 ; i < Box.width_; ++i )
{
p++;
}
}
但是我想做的不是遍历子图像中的每个像素,而是遍历每 n 个像素。例如,在查看源自此 5x5 图像的 0,0 处的 3x3 子图像时,我想每隔一个像素遍历一次:
X _ X _ _
_ X _ _ _
X _ X _ _
_ _ _ _ _
_ _ _ _ _
但我想不出一个好的方法来做到这一点。有什么想法吗?我尽快完成这件事很重要。
解决方法
未经测试很难说哪个更快或更慢,但平坦的索引可以解决问题:
for (uint idx = 0; idx<reg.height*reg.width; idx+=step) {
uint i = idx%reg.height + reg.x,j = idx/reg.width + reg.y;
img(i,j) = 'X';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。