RaspberryPIでNetBSDを動かしたときの色表示問題

Raspberry PIでNetBSDを楽しく日夜動かす今日この頃。mlterm-fbで画像を表示させるとあれなんかおかしい顔色悪いぞガミラスっぽい感じになっちゃいますよどういうことですか。icewm上のだえもんさんもなんか顔色わるいんですが。について。ああこれを英語で説明しなきゃいけないのかと思うと顔色が悪くなりそうだけどほっとくと忘れそう。
1
前へ 1 2 3 ・・ 8 次へ
oshimaya @oshimyja

突然気がついた。あのicewm、imlib使ってなかったような。どうやって背景出してたんだ?

2013-10-17 12:29:09
oshimaya @oshimyja

そもそもmikutterは色化けしてなかったじゃん。ちゃんと見てないけどdilloも。

2013-10-17 12:30:26
oshimaya @oshimyja

てことはやっぱりXserverは悪くなくて、単にicewmにRGBorder決め打ちにしてるっていうザル処理があるって考えるのが妥当だよな。

2013-10-17 12:33:06
oshimaya @oshimyja

てなわけでこの2日ほどはほとんど無駄骨だったことが確定。

2013-10-17 12:34:25
oshimaya @oshimyja

icewm使ってないから解らんよ。

2013-10-17 12:35:05
oshimaya @oshimyja

c++わからんけど、どうもocewmはPseude colorが先にあった感じがするから、やっぱ今更感漂うな。

2013-10-17 12:38:45
oshimaya @oshimyja

X68kでicewm動かしても色狂うんちゃうかもしかして。15bit colorだけどRGBの順が違うから。GRBで5550。byteorderも違うから偶然起きないかもしれんが。

2013-10-17 12:43:24
oshimaya @oshimyja

icmwm (1.2.x)、腐ってる。

2013-10-17 23:26:58
oshimaya @oshimyja

pkgsrcにあるicewm (今1.2.35?)では、xpmの画像を表示するのに、読み込んだXImageから画像のデータバイトのみをchar 配列に取り出している。

2013-10-17 23:29:17
oshimaya @oshimyja

取り出す際には、ちゃんとXserverのDefaultVisualからr,g,b のmaskを参照して、charの1番めは赤、2番めは緑、3番目は青、という順にRGBそれぞれ分解して保管。このときはR->G->Bという順は固定。

2013-10-17 23:31:32
oshimaya @oshimyja

で、取り出した後、今度は使う(=実際に描画する)ために、「別の」XImageを作る。

2013-10-17 23:32:27
oshimaya @oshimyja

このXImageのデータ部分に、さっきのRGB単位で分解された配列を、なぜか「1バイトめを3バイトめに、2バイトめを2バイトめに、3バイトめを1バイトめに」なるように格納している。この順序や入れ替えパターンは固定。

2013-10-17 23:34:34
oshimaya @oshimyja

つまり取り出したR->G->Bの順で作られているバイト列を、今度はXImage->dataにB->G->Rの順で格納する。

2013-10-17 23:38:03
oshimaya @oshimyja

byteorderがendian-little だと、これは32bit値で 0x00RRGGBB と評価される。

2013-10-17 23:38:58
oshimaya @oshimyja

この値は、i386なんかのXserverでrgb maskが 0xff0000, 0xff00, 0xff な環境ではピッタシ。無問題。

2013-10-17 23:41:23
oshimaya @oshimyja

しかしながら、ここで使う新しいXImageはまだrgb maskが設定されておらず0のままのはず。が、しかし、maskが0の場合はDefault Visualからmaskを求めて突っ込むというコードがあるので、おそらくそこを通っている(未確認)

2013-10-17 23:42:16
oshimaya @oshimyja

つまり、VC4のようなrgb maskが 0xff,0xff00,0xff0000 な環境でこの処理を実行すると、RRGGBBのはずがBBGGRRとして扱われる。

2013-10-17 23:43:14
oshimaya @oshimyja

結果、青と赤が入れ替わる。

2013-10-17 23:43:33
oshimaya @oshimyja

この処理は、こともあろうか、RGB maskが 0xff0000, 0xff00, 0xff 或いは 0xff00, 0xff00, 0xff0000 の時だけ行われる。

2013-10-17 23:44:36
前へ 1 2 3 ・・ 8 次へ