为什么这个程序不能将我的位图转90度?

时间:2011-12-08 02:02:40

标签: c++ visual-c++

以下代码应将图像旋转90度,但不起作用。相反,我跑完后进入屏幕的是灰色像素和底部原始像素的一行。关于我在这段代码中做错了什么的想法?

  void rotate90(Image& image)
    {
        Pixel * tempPixel = new Pixel[(image.infoHeader.biWidth * image.infoHeader.biHeight)];
        int tempWidth = image.infoHeader.biWidth;
        for(int r = 0; r < image.infoHeader.biHeight; r ++)
        {
            for(int c = 0; c < image.infoHeader.biWidth; c++)
            {

                int f = c+(r*image.infoHeader.biWidth);
                int t = (image.infoHeader.biHeight - r) + (image.infoHeader.biWidth-1);
                tempPixel[t] = image.pixels[f];
            }
        }

        delete[] image.pixels;
        image.pixels=tempPixel ;
    }

我在下面的评论中更新了代码

void rotate90(Image& image)
{
    Pixel * tempPixel = new Pixel[(image.infoHeader.biWidth * image.infoHeader.biHeight)];
    int tempWidth = image.infoHeader.biWidth;
    image.infoHeader.biWidth = image.infoHeader.biHeight;
    image.infoHeader.biHeight = tempWidth;
    for(int r = 0; r < image.infoHeader.biHeight; r ++)
    {
        for(int c = 0; c < image.infoHeader.biWidth; c++)
        {

            int f = c+(r*image.infoHeader.biWidth);
            int t = (image.infoHeader.biHeight-r-1) +(image.infoHeader.biWidth * ((4 * image.infoHeader.biWidth * image.infoHeader.biHeight) % 4));
            tempPixel[t] = image.pixels[f];
        }
    }

    delete[] image.pixels;
    image.pixels=tempPixel ;
}

1 个答案:

答案 0 :(得分:1)

您在计算新职位c时未使用t。它应该乘以我猜的宽度