2

QImageRGB32 をQImageRGB24に変換しようとしています。この場合、私のコードは機能しません:

画像の BMP ヘッダーに 1024 バイトが追加されている場合、画像のサイズは X*Y*3+54+不明な 1024 バイトになります。

奇妙なことは、画像の解像度 x == 解像度 y の場合、コードが機能することです。たとえば、512x512 または 1024x1024 です。状況がどうであれ、ヘッダーに追加の 1024 バイトがある場合とない場合です。

BMP のヘッダーに追加の 1024 バイトがない場合、解像度 x が解像度 y と異なっていても、すべて正常に機能します。私のコード:

QImage * img=new QImage("test.jpg");//load img as RGB32 32bit per pixel whatever the format of input

QImage * tmp_img=new QImage(img->width(),img->height(),QImage::Format_RGB888);// image dest 24bit per pixel

     uchar * ptr1=img->bits();
     uchar * ptr2=tmp_img->bits();

     for( int k1=0,k2=0;k1<img->width()*img->height()*4;k1+=4,k2+=3)//increment k1 by 4 because img format is RGB32
                                                  //increment k2 by 3 because tmp_img format is RGB888
     {
         ptr2[k2]=ptr1[k1];
         ptr2[k2+1]=ptr1[k1+1];
         ptr2[k2+2]=ptr1[k1];
     }
4

1 に答える 1

2

古い回答を削除しました。

なぜ単純にこれをしないのですか:

QImage img2 = img->convertToFormat(QImage::Format_RGB888);
于 2013-08-07T14:22:57.553 に答える