[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:6625] display-color-cells on Remote Desktop
- X-ml-count: 6627
- Subject: Re: [MD:6625] display-color-cells on Remote Desktop
- From: Kyotaro HORIGUCHI <horiguti@xxxxxxxxxxx>
- Date: Sat, 02 Jul 2005 23:01:03 +0900 (JST)
- User-agent: Mew version 4.2.50 on Emacs 22.0 / Mule 5.0 (榊) / Meadow-3.00-dev (菊)
> > 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 で^^:
--
ほりぐちきょうたろう