私は生のrgbデータの配列を持っています。 Windows OSでこのピクセルを画面上に描画するにはどうすればいいですか?ウィンドウ内のビットの配列(rgb)を描画する
今私はAPI関数DrawDIBitsを使用しますが、私は画像データを生成する必要があります。
私は生のrgbデータの配列を持っています。 Windows OSでこのピクセルを画面上に描画するにはどうすればいいですか?ウィンドウ内のビットの配列(rgb)を描画する
今私はAPI関数DrawDIBitsを使用しますが、私は画像データを生成する必要があります。
(R、G、B)を(B、G、R)に戻すことなく描画することを意味する場合は、それを自動的に行う方法はわかりません。
各行を4ピクセルの倍数にパディングせずに描画する場合は、一度に1行ずつ描画することで行えます。しかし、それは遅くなります。
私は常にSetDiBitsToDeviceを使用しますが、drawDIBitsも同様に問題ありません(チェックしていません)。
窓ブリット機能の逆さまな性質について:回避策はあり
。関数にBITMAPINFOHEADERまたはBITMAPINFO構造体を渡すと、bitmap-heightメンバの値が無効になります。これは、高さが正であるようにblitを実行するようにGDIに指示しますが、データをトップダウン順序で格納されたbeeingとして解釈します。
あなたはこの「ハック」によってもスピードの向上が得られるかもしれません。
ピクセルのバイトオーダーをシャッフルする(ARGBをBGRAなどにするなど)場合は、BITMAPV4HEADER構造体を使用してGDIにピクセルデータの構成方法を伝えることができます。それはめったに使用されない機能ですが、WIN98以降は機能します。最近使用するのは節約だと言えるでしょう。
私はBITMAPV4HEADERのドキュメントをチェックしましたが、BI_BITFIELDSを使用する以外は、RGBの順序を逆にする方法はありません。それは24BPPではなく16/32BPPでしか動作しません。 –
ああ - それは本当です。私はめったに24ビットフォーマットを使用せず、BI_BITFIELDSが24bppで動作しないことを知りませんでした。 –
画像データを「表示」するのはどういう意味ですか? –
これは通常の画像データを持っているようなものです。それははるかに良いです。私は個人的に、最大ゲイン256を受け付けるMarshalImageAmp(byte * imageData、unsigned char gain)関数を使用しています。これは、unsigned charに対して255の値しか受け入れない関数よりもはるかに優れているからです。 – Eclipse