-1
次のコードは画像を90度回転させるべきですが、動作しません。代わりに、実行した後に画面上に表示されるのは、灰色のピクセルと、元のピクセルの1行が下部に表示されます。私がこのコードで間違っていたことについてのアイデアはありますか?なぜこのプログラムはビットマップを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 ;
}
また、biWidthにbiWidthを掛けてはならず、biWidthに1ピクセルあたりのバイト数を乗算し、4の最も近い倍数に切り上げることに注意してください。 –
どこでも混乱したピクセルの束を得る。 – Jake
私のコード – Jake