一个biBitCount=24 的位图。我设置了两个char 指针,分别用来存放旋转前位图的数据,和旋转后位图的数据。如何在for语句里,使旋转后buffer里面的数据等于相对应的旋转前的buffer里面的数据啊。
小弟在此先谢谢各位大侠啦!

解决方案 »

  1.   

    有一点LZ需要注意,图像选中后往往大小会发生变化,确切地说,会变大!所以,如果旋转的度数不是90的整数倍,LZ所提的问题本身就是有问题的。旋转后的图像大小都变化了,还怎么和原来的图像数据相提并论?不过,如果LZ所说的旋转肯定是90度的话,问题就简单了。先选装,转完之后把新的图像数据中的像素点一个一个地拷贝回去,冲掉原来的像素值。或者,更干脆,把原来的指向图像像素buffer的指针直接指向新的图像像素buffer,在delete掉原来的图像像素buffer。上述内容在细节上可能需要仔细推敲,思路应该是对的。
      

  2.   

    就使旋转90度,我使下面这样做的,就有问题,不知道怎么该,大哥指教一下
    bmiHeader.biWidth 旋转前的宽
    bmiHeader.biHeight 旋转前的高
    oldSizePerLineData  旋转前一行字节数
    newSizePerLineData  旋转后一行字节数
    for(int x = 0; x < bmiHeader.biWidth; x++)
    {
    for(int y = 0; y < bmiHeader.biHeight; y++)
    {
                           DestBuffer[(BYTE)(3 * (bmiHeader.biWidth - y)) + x * newSizePerLineData] 
    = SrcBuffer[(BYTE)(3 * x) + y * oldSizePerLineData];
    }
    }因为使24位位图,所以上面有成3,让后将像素转换成字节。一个字节一个字节的拷,不知道小弟这样写的错误是什么,希望大侠指教!谢谢先!
      

  3.   

        for(int y = 0; y < bmiHeader.biHeight; y++)
    {
    for(int x = 0; x < bmiHeader.biWidth; x++)
    {
                          DestBuffer[(3 * (bmiHeader.biWidth - y)) + x * newPerLineData] 
    = SrcBuffer[(3 * x) + y * oldPerLineData]; 
    }
    }这样子改怎么还不对啊!!
      

  4.   

    出来的结果是什么样的?
    BMP的话要注意,每行必须是能被4整除的。