2009-04-23 3 views
3

私は生のrgbデータの配列を持っています。 Windows OSでこのピクセルを画面上に描画するにはどうすればいいですか?ウィンドウ内のビットの配列(rgb)を描画する

今私はAPI関数DrawDIBitsを使用しますが、私は画像データを生成する必要があります。

+0

画像データを「表示」するのはどういう意味ですか? –

+0

これは通常の画像データを持っているようなものです。それははるかに良いです。私は個人的に、最大ゲイン256を受け付けるMarshalImageAmp(byte * imageData、unsigned char gain)関数を使用しています。これは、unsigned charに対して255の値しか受け入れない関数よりもはるかに優れているからです。 – Eclipse

答えて

0

(R、G、B)を(B、G、R)に戻すことなく描画することを意味する場合は、それを自動的に行う方法はわかりません。

各行を4ピクセルの倍数にパディングせずに描画する場合は、一度に1行ずつ描画することで行えます。しかし、それは遅くなります。

3

私は常にSetDiBitsToDeviceを使用しますが、drawDIBitsも同様に問題ありません(チェックしていません)。

窓ブリット機能の逆さまな性質について:回避策はあり

。関数にBITMAPINFOHEADERまたはBITMAPINFO構造体を渡すと、bitmap-heightメンバの値が無効になります。これは、高さが正であるようにblitを実行するようにGDIに指示しますが、データをトップダウン順序で格納されたbeeingとして解釈します。

あなたはこの「ハック」によってもスピードの向上が得られるかもしれません。

ピクセルのバイトオーダーをシャッフルする(ARGBをBGRAなどにするなど)場合は、BITMAPV4HEADER構造体を使用してGDIにピクセルデータの構成方法を伝えることができます。それはめったに使用されない機能ですが、WIN98以降は機能します。最近使用するのは節約だと言えるでしょう。

+0

私はBITMAPV4HEADERのドキュメントをチェックしましたが、BI_BITFIELDSを使用する以外は、RGBの順序を逆にする方法はありません。それは24BPPではなく16/32BPPでしか動作しません。 –

+0

ああ - それは本当です。私はめったに24ビットフォーマットを使用せず、BI_BITFIELDSが24bppで動作しないことを知りませんでした。 –

関連する問題