关于图像指针!!!熟悉图像的大虾请进。。。(200分)

  • 主题发起人 主题发起人 小风
  • 开始时间 开始时间

小风

Unregistered / Unconfirmed
GUEST, unregistred user!
最近在做一个处理图像的小东西,但根据光标的值读取图像指针时,碰到一点问题:我的程序如下:
CPOINT point;
n=point.y*bytes_per_line+point.x*3;
//24bit的位图
读ss[n],ss[n+1],ss[n+2]的BYTE值。

问题所在:读出的像元值与光标所指相差几乎 几十行。
 
point的值是不是对的
 
point是读取的窗口坐标:从左上角(0,0)开始。
有什么不对?图像也是从坐标(0,0)开始画的呀。
 
怎么读的?鼠标的坐标?那是全屏幕的坐标,
你要把他转换为本窗口client区域的坐标:
ScreenToVlient
 
ScreenToClient
 
bytes_per_line是什么?
bmp的bytes_per_line并不等于bytes_per_pixel*pixels_per_line
还要加一个调整数(为了对齐)
 
似乎active window中左上角的(0,0)应该是client的坐标,不需要进行转换呀!!
 
屏幕的0,0是左上角,难道你的window没有标题栏?
 
我的意思是:我在显示图像像元时,也同时显示了光标所在的坐标,
当我指向图像所在窗口的左上角时,坐标为(0,0),而图像的像元值读出来却不对。
图像在显示时,我从(0,0)开始画图,显示的图像也是从client window的左上角开始画的。
两者似乎应该一样,我的说法有错误吗?屏幕坐标是怎么一回事?
 
ss[]数组是否正确定位到了的BMP数据区?
BMP的存储是按行的,但每行最后要补充0~3字节的0,确保是4的倍数
24位BMP:int bytes_per_line=4*((3*Width+3)/4) 对C的语法都快忘了,
不知表达式对不对,DELPHI的话 =4*((3*Width+3)div 4)
另外以前用Matlab处理位图,发现位图是转置后存在Matlab数组里的,对C不知如何
 
我对图像指针的处理应该没有问题,确实是从图形的数据部分开始读入指针的。
大家有做过相似的程序吗?
 
你的bytes_per_line怎么算出的?跟我的一样吗?
我只做过256色位图
 
经过几度实验,我发现问题出在图像数据的指针数组上,我的实验如下:
用一红色色块,区域为(80,140)到(210,213),然后从图像数组中读出第一个颜色为红色的像元的行列值,发现为(80,134),确实是行的位置读的不对。两者相差6行。为什么会这样呢?
 
现在我又用一个黑色的方快实验,发现所得到的值又有变化。
黑色方块为从(90,90)开始画,但从同样的程序中读出的第一个为黑色的
像元位置又变成了(90,126),两者相差36行,why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?why?
 
那么你的画布是(0,0)到多少呢?
 
画布为:(0,0)到图像信息中读取的height 与 width值。
 
问题已经解决,真的是一个小问题,可能我没有说清楚。
因为画布窗口从左上角开始,而位图从左下角开始,所以在读取时出错。
 
后退
顶部