一个显示位图的简单问题,高手来看看啥毛病..

heavenb 2005-07-31 01:40:25
读一个bmp文件,用打点的方式画上去,但却出现奇怪的问题
fseek(BitmapFp,BitmapDataOffset,SEEK_SET);
x=0;
y=BitmapHight-1;

fseek(BitmapFp,BitmapDataOffset,SEEK_SET);

for(u32Loop=0;u32Loop<BitmapDataSize/3;u32Loop++)
{

fread(PixelData,3,1,BitmapFp);
DWORD color;
color=RGB(PixelData[2],PixelData[1],PixelData[0]);
SetPixel(hDC, x, y, color);
if(x==BitmapWidth)
{
y--;
x=0;
}
x++;
}

这样每次读出来的象素是对的,但是,却画出来的整副图都是第一个象素的颜色,
非要在for中加上fseek才行


for(u32Loop=0;u32Loop<BitmapDataSize/3;u32Loop++)
{
fseek(BitmapFp,BitmapDataOffset+u32Loop*3,SEEK_SET);
fread(PixelData,3,1,BitmapFp);
DWORD color;
color=RGB(PixelData[2],PixelData[1],PixelData[0]);
SetPixel(hDC, x, y, color);
if(x==BitmapWidth)
{
y--;
x=0;
}
x++;
}
这样就可以画出正确的图象。请问何解啊?
...全文
166 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
khpcg 2005-09-29
  • 打赏
  • 举报
回复
high
jixuchen 2005-08-19
  • 打赏
  • 举报
回复
你自己不是说了啊
因为你不加fseek的话,指针一直不移动,也就是说你只读了第一行的位图信息
留个邮箱地址,我们交流下;
province_ 2005-08-03
  • 打赏
  • 举报
回复
而且啊,只能用在24位BMP上。
booklove 2005-08-01
  • 打赏
  • 举报
回复
我也遇到过,直接改成 CreateFile 了。
heavenb 2005-07-31
  • 打赏
  • 举报
回复
找到原因,需要使用rb模式打开文件,因为如果用文本方式打开的话fp遇到换行就会停止移动。
heavenb 2005-07-31
  • 打赏
  • 举报
回复
纠正一下,不是画出的第一个象素,而是文件读出了1024个象素后就不会往前移动了。。。。。。
也就是说读一个1024*768的只有第一行画对了,其他的都是错的

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧