2011-12-08 7 views
-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 ; 
} 

答えて

1

以下のコメントであなたが新しい位置tの計算にcを使用していないのように私の更新されたコード。それは私が推測する幅を掛ける必要があります

+0

また、biWidthにbiWidthを掛けてはならず、biWidthに1ピクセルあたりのバイト数を乗算し、4の最も近い倍数に切り上げることに注意してください。 –

+0

どこでも混乱したピクセルの束を得る。 – Jake

+0

私のコード – Jake

関連する問題