以下代码应将图像旋转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 ;
}
答案 0 :(得分:1)
您在计算新职位c
时未使用t
。它应该乘以我猜的宽度