VC++图像处理求教
对于一幅图像, wide=this->GetWidth (); //取得原图的数据区宽, height=this->GetHeight ();//取得原图的数据区高,
BYTE* p_temp=new BYTE[wide*height];// 申请并动态分配缓存
在数组运算时必须是 p_temp[j*wide+i]表达吗?如想p_temp[i][j]表达该怎样办?
另外还有一个结构体数组a,结构体定义如下:struct mark
{
double distance;//存储与最近目标点的距离
int x;//存储与最近目标点的相对列号(对应i)
int y;//存储与最近目标点的相对行号(对应j)
};
如两者进行运算,怎样定义a?是否需对a进行动态分配内存?是直接p_temp[i][j]+a[i][j]?还是p_temp[j*wide+i]+a[i][j]?还是p_temp[j*wide+i]+a[j*wide+i]?
请指教,我将不胜感激。
[最优解释]
你定义的p_temp是指针,p_temp[i][j]是二维数组的用法,肯定不行。你可以使用二维数组表示A[wide][height],
如:
BYTE A[wide][height]; //定义二维数组
则第i行第j列的元素就是A[i][j];
或者使用一位数组,如:
BYTE A[wide*height];
则第i行第j列的元素就是A[wide*i+j].
你这个跟结构体运算也有问题,你应该去除x,y单独预算吧,如A[wide*i+j]+a[i].x
[其他解释]
元芳,高手在哪里?咱们在线等吧
[其他解释]
跪求高手解答
[其他解释]
谢谢楼上,但a[i].x与图像数据像素对不上呀,像素坐标应该有(i,j)才对呀。高手呢?有没有不忙的高手帮我一下
[其他解释]
从来不用二维数组
所有的数组本质上都是一维数组,二维数组写起来简单,实际上却导致关于指针类型的各种复杂的思考
保存图像一般使用一维数组,我想根本原因还是在于一维数组和二维数组的一个本质区别:二维数组作为函数参数传递时,必须在代码里提供第二维的大小,即图像的宽度必须在代码里确定。但在实际运行的程序上,图像的大小一般是不能预先确定的,因此,二维数组这种写起来方便一点点的写法,会造成使用上的各种不方便。
总之我的建议就是,除了非常简单的应用外,放弃多维数组。
[其他解释]
楼主
BITMAPINFOHEADER 这个位图头中
NGbiWidth; // 位图的宽度,以像素为单位
LONGbiHeight; // 位图的高度,以像素为单位
来确定你所谓的i和j。
像素数据区中的存储(超过8位之后就无调色版了)3个字节保存一个像素RGB,并无索引。
因此只能用指针根据宽度和高度去计算了。
GetPixel其实可以满足你的需求。
[其他解释]
baichi4141
总之我的建议就是,除了非常简单的应用外,放弃多维数组
现在我用的就是一维数组的形式,但怎样定义结构体数组a?是否需对a进行分配内存?
[其他解释]
tiger9991
GetPixel其实可以满足你的需求
首先感谢您的回答,由于自带的getpixel与setpixel函数都需要句柄,这对于我不太方便(图像显示和保存,我自定义了CDIB,不同于DBB),内否详细解释一下。因为本人能力有限,不能非常意会您的意思
另外,您的意思是不是通过这样两个函数就可使用二维数组?求具体和例子
[其他解释]