[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:6625] display-color-cells on Remote Desktop



> >  2. GetDeviceCaps (hdc, NUMCOLORS) の意味が実は期待しているのと違う?
> >     "デバイスのカラーテーブルのエントリ数" != "表現可能な色の数" ?
> >     (だったらどうすればよい?)
> 
> そっち方面に詳しいわけではありませんが、MSDNなりを見る限り
> NUMCOLORSは8bppより大きい時は-1を返すとあります。

 はい, そう書いてあります.

> 20や16777216 を返す理由はわかりませんが、

 なんとなく 8bits per plane とかってに解釈して 2^(3*8) には疑問を
感じていませんでしたが確かに no more than 8bit per pixel と書いて
ありますね.. いずれにしても 20 というのは意味不明すぎです.

 でも, このmw32fns.c のすぐ下のところで

| /* We force 24+ bit depths to 24-bit, both to prevent an overflow
|    and because probably is more meaningful on Windows anyway */
|
| if (cap < 0)
|   cap = 1 << min(dpyinfo->n_planes * GetDeviceCaps (hdc, BITSPIXEL), 24);

 だそうで, ここを書いた人は, bpp の定義をカラープレーンごとの量子
化ビット数という解釈でやってるのですかね. でもMSDNのGetDeviceCaps
の説明で 15bpp とか 16bpp というBITSPXIEL 値が出てきてるからその解
釈が間違いということですね. 現に後藤さんの実験では BITSPIXEL は画
素ごとのピクセル数が返ってきてるみたいだし.

> グラフィックデバイスとして表現可能な色数はCOLORRESで、

 COLORRESはパレットを使う状態でないと意味がないようです. すくなく
とも私が動かしたときには 

  GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE == FALSE

 のようなのでこれは使えないと思います.

> プログラムが使用できるパレット数はBITSPIXELで得るのではないでしょうか。
> 簡単な実験をしてみた限りは、local 24bpp, remote 16bpp, remote 8bpp
> のいずれでも期待した値が得られたぽいです。

 できればそれぞれの NUMCOLORS もとってみてもらえません? 私がなんか
してるのかもだし.

> そゆいみでなく?

 いえ, 結果としてそういうことなのだと思います. ということは,
NUMCOLORS を使わないようにしてその代わりに

  cap = 1 << min(GetDeviceCaps (hdc, BITSPIXEL), 24);

というかんじにしてしまうのが吉ということですね. XPでは (ほかのOSで
はどうなるかわからないところがきつい)

 まぁやってみてよさげなら入れちゃいましょう. #ifdef MEADOW で^^:

-- 
ほりぐちきょうたろう