我写了一个把24位位图显示的小程序,可是位图和原位图的显示差别很大
完全乱了,24位没有调色板的。大家帮兄弟看看
还有,位图是从下到上倒着读的,我不知道弄得对不对,需要工程的话我可以
给大家个下载地址void CAADlg::OnButton2() 
{
 struct BmpData
 {
 BYTE BLUE;
 BYTE GREEN;
 BYTE RED;
 };
 BmpData dt;
 char bb[10];
 CBitmap b;
     CFile f;
 f.Open("c:\\bb.bmp",CFile::modeRead);
 BITMAPFILEHEADER bh;
 BITMAPINFOHEADER bo;
 int width;
 int pos;
 int heigth;
 f.Read(&bh,sizeof(bh));
 f.Read(&bo,sizeof(bo));
          width = bo.biWidth;
 height = bo.biHeight;
 
 CDC *dc = GetDC();
          int x,y;
 x=1;
          y=height; //y的初始值是位图的高度,然后要倒着读
 long ioff;
 pos = 0;
 ioff = sizeof(bh) + sizeof(bo);  while(TRUE)
 {
   if(f.GetPosition() == f.GetLength())
   {
   break;
   }
          //读红绿蓝颜色分量
         f.Read(&dt.RED,sizeof(BYTE));
f.Read(&dt.GREEN,sizeof(BYTE));
f.Read(&dt.BLUE,sizeof(BYTE));
dc->SetPixel(x,y,RGB(dt.RED,dt.GREEN,dt.BLUE));
//如果x%width==0 表示已经读完了一行,则y轴坐标减1,x轴置为初始值1
                   if(x%width==0)
{
    x = 1;
    y -- ;
}
else
{
x++;
}
 }
     f.Close();
}我昨天晚上的结果是位图基本能显示出来,但是扭曲,还有就是好像是右边的一般显示在左边,左边的一般
显示在右边,好像人的左右脸交换过似的,但是大体上有个图像的样子,颜色搭配也和原图一样
大家赶紧帮我看看,谢谢了

解决方案 »

  1.   

    字节对齐问题, 位图每行字节数是4的倍数。 PS:你的问题没分......
      

  2.   

    怎么弄字节对齐啊,我不会写,你帮帮我吧,我不知道怎么搞,分无所谓,都给你也成
      

  3.   

    比如图像宽5个像素,那么,这5个像素需要15个字节来存放,但是因为要字节对齐,所以要多些,比15个字节大的下一个对齐位置,就是16字节处,这样的,该位图每行像素实际占用16个字节,如果你读的话,应按16字节来读。最后那个字节无用。
      

  4.   

    你给我写几句代码吧,字节对齐的意思我也大概知道,不会写,大哥帮帮我
      

  5.   

    哎,终于自己搞定了,求人不如求自己,真高兴啊
    今天终于学会位图解码了,呵呵