我尝试将QImage
RGB32转换为QImage
RGB24。我的代码在这种情况下不起作用:
当图像在 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];
}