首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC++图像处理求教,该如何处理

2012-12-27 
VC++图像处理求教对于一幅图像, widethis-GetWidth () //取得原图的数据区宽, heightthis-GetHeight

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),内否详细解释一下。因为本人能力有限,不能非常意会您的意思
另外,您的意思是不是通过这样两个函数就可使用二维数组?求具体和例子
[其他解释]

引用:
楼主

BITMAPINFOHEADER 这个位图头中

NGbiWidth; // 位图的宽度,以像素为单位  
LONGbiHeight; // 位图的高度,以像素为单位  

来确定你所谓的i和j。

像素数据区中的存储(超过8位之后就无调色版了)3个字节保存一个像素RGB,并无索引。
因此只能用指针根据宽度和高度去计算了。

GetPixel其实可以满足你的需求。
……



的确看到有用getPixel及setpixel实现用二维数组计算的,但不知具体怎样?能给个例子吗?谢谢!

热点排行