Qtを使用して次のことを行う場合:
- QImage::Format_RGB32 にビットマップをロードします。
- そのピクセルを RGB565 に変換します (これには Qt 形式がないため、「手動で」行う必要があります)。
- 手順 1 でロードしたものと同じサイズの新しいビットマップを作成します。
- 手順 3 で作成したイメージで、RGB565 バッファー ピクセルを RGB88 に戻します。
- 手順 4 で作成された画像は手順 1 の画像に似ていますが、RGB 値を比較するとまったく同じではありません。
手順 2 から 5 を繰り返すと、最終的な画像の色が失われ、ますます暗くなるように見えます。
ここに私の変換関数があります:
qRgb RGB565ToRGB888( unsigned short int aTextel )
{
unsigned char r = (((aTextel)&0x01F) <<3);
unsigned char g = (((aTextel)&0x03E0) >>2);
unsigned char b = (((aTextel)&0x7C00 )>>7);
return qRgb( r, g, b, 255 );
}
unsigned short int RGB888ToRGB565( QRgb aPixel )
{
int red = ( aPixel >> 16) & 0xFF;
int green = ( aPixel >> 8 ) & 0xFF;
int blue = aPixel & 0xFF;
unsigned short B = (blue >> 3) & 0x001F;
unsigned short G = ((green >> 2) < 5) & 0x07E0;
unsigned short R = ((red >> 3) < 11) & 0xF800;
return (unsigned short int) (R | G | B);
}
私がテスト画像から見つけた適切に変換されない例は 4278192128 で、RGB565 から RGB888 に 4278190080 として変換されます。
編集: 元のソース データが RGB565 (テスト用の RGB888 イメージが作成された元) であることにも言及する必要があります。表示目的でのみ RGB888 に変換していますが、データの 2 つのコピーを保持するのではなく、後で RGB565 に変換したいと考えています。