2

私は、データを1行ずつX11ディスプレイにプロットするアプリケーションを持っています。ここで、各行は実際には異なるカラーピクセルで構成されています。

XImage*これを行うには、データ配列をusingにマッピングしますXCreateImage。次に、データが処理されるときに、XColor変数に赤、緑、青の値を入力し、呼び出しXAllocColorて色を割り当てます。次に、データ配列内の対応する要素にピクセル値を割り当てます。すべてのデータが設定されたら、を使用して線をプロットしXPutImageます。

Linuxでディスプレイを実行すると、すべてが期待どおりに見栄えがします。ただし、ssh経由でX11ディスプレイをWindowsに転送すると、色がすべて乱雑になります。

何か案は?

編集

を使用せず、必要な前景色でを作成して使用するXCreateImageと、問題なく動作します。の問題であると思われるか、を使用すると問題が自動的に解決されます。XPutImageGCXDrawPointXImageGC

4

1 に答える 1

0

解決策を見つけまし。この問題は、Windows と Linux の色の違いに起因しているようです。Windows は色 BGR と BGRA を格納しますが、Linux は色 RGB と ARGB を格納します。したがって、ディスプレイが Windows に移動するときはいつでも、呼び出しの前に赤と青の値を交換する必要があり、呼び出しXAllocColorの後に のpixel要素をXColor256 倍して、色をアルファ コンポーネントを超えてシフトする必要があります。

これに関連していくつかの問題があります。

  1. ディスプレイが Linux でレンダリングされているか Windows でレンダリングされているかをアプリケーションが判断できないため、テスト用に環境変数を使用しています。
  2. これは、Windows の 32 ビット画面深度でのみ機能します。深度が 24 ビットのみの場合は 256 の乗算を無視します。それよりも小さいかはわかりません

このため、私は編集で提案した方法にいくつかの変更を加えて実際に実行しています。主に、GC初期化中に使用する予定の色ごとに作成するため、毎回作成するのではなく、必要に応じて参照することができます。これにより、XImage.

于 2011-03-25T13:04:41.660 に答える