68user's page 掲示板

Prev< No. 1101〜1111> Next  [最新発言に戻る] [過去ログ一覧]
No. 1101 # hsj 2000/08/22 (火) 15:14:38
@68userさん
>暇な人は原因を考えてみてください。
perlは「何となく読める」ぐらいしかわからないのですが、
考えてみました。
原因がわかったとき脱力しました(笑

No. 1102 # gongo [E-mail] 2000/08/22 (火) 17:38:14
@68user様
Xウィンドウでの色の扱い方についての質問です。

Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して
いらっしゃいますが、これはどうしてなのでしょうか。
XColor構造体のred、green、blueのメンバは色のRGB値が入りますよね。
そして実際これらのメンバはunsigned shortのはずだから0から65535までの
値になるはずなのになぜ0から255の範囲で指定していらっしゃるのでしょうか。

試しに自分で簡単なプログラムを作ってみて、
同じように値(例えば"rgb:00/00/F0")をいれて見たのですが、
結果的にXAllocNamedColor後に各RGB値を見たところ、Red=0 Green=0 Blue=63420
となっていたので、きちんとunsinged shortになっています。
よって動作としては問題ないと思うのですが、どうして0から255の範囲で指定して
いたものが勝手に0から65535の範囲に直されたのかがよくわかりません。
それとXAllocNamedColorの一番後ろの引数には指定した色の正確なRGB値が入る
とのことなので調べたところ、Red=0 Green=0 Blue=61680 となっていました。
ということは指定した色に最も近いRGB値が入ったということなのでしょうか。
(厳密に同じRGB値になってほしいのですが)

そもそも自分の環境が一体何万色中何色同時発色できるのかというのが
いまいちよくわかりません。RGBの各々の強度を8ビットで表現すると
組合せとして約1677万色(フルカラーというのでしょうか)になりますが
実際はどうなのでしょう。前述のようにXColor構造体のRGBの各メンバは
unsigned shortです。ということはRGBそれぞれが16ビットで表現されるので
組合せとしては大変な数になってしまいます。

また同時発色についてはカラーマップが問題となってくる(?)のでしょうか。
本には、同時に画面に表示できる色の数はプレーン数から決まる
と書いてありました。で、私の使用しているディスプレイの情報を調べたところ
---------------------------------------------------
*Information of Visual Class*
-visual class : TrueColor
-red_mask : 00007c00
-green_mask : 000003e0
-blue_mask : 0000001f
-bits_per_rgb : 5
-map_entries : 64

*Other Informations*
-depth :16
-the number of cells in the colormap : 64
-the number of planes : 16
---------------------------------------------------
となりました。プレーン数が16ということはカラーマップのエントリは
最大65536色まで作れる(ということは65536色同時発色できる!?)とも
思ったのですが、カラーマップのセルの数は64という情報まで出てきました。
いくらなんでも64色ということはないと思うのですが・・・。

色に関してかなり頭の中が混乱しているのですが
何卒宜しくお願い致します。

No. 1103 # YAGI [E-mail] 2000/08/22 (火) 17:59:11
質問なのですが…

皆様はじめまして。今回初歩的な質問なのですが、
どうしてもわからなく投稿させて頂きます。

UNIXコマンドでuptimeがあると思うのですが
ロードアベレージ部の1分、5分、15分のところに表示される
0.09などといった値は何を基準に表示されるのでしょうか?

申し訳ありませんがお答え頂きたく思います。
よろしくお願いいたします

No. 1104 # 68user 2000/08/22 (火) 18:13:29
@hsj さん
> 原因がわかったとき脱力しました(笑
僕と同じ思いをしていただいたようで、なによりです :-)

@gongo さん
> Xアプリケーション工房のXlib編(3)で、RGBの値を0から255の範囲で指定して
> いらっしゃいますが、これはどうしてなのでしょうか。
一言で言えば X の仕様です。X(1) に
    rgb:<red>/<green>/<blue>
            <red>, <green>, <blue> := h | hh | hhh | hhhh
            h := single hexadecimal digits
とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 = rgb:ffff/ffff/0000 ですね。
ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。
# Ex. kterm -background rgb:00/33/55

> 本には、同時に画面に表示できる色の数はプレーン数から決まる
> と書いてありました。で、私の使用しているディスプレイの情報を調べたところ
> -depth :16
depth って、1色ごとの bit 数じゃなかったかなぁ。
なので、この環境だと 256*256*256 で 1677万色
出…ないかなぁ。違うかなぁ。

正直カラーマップのことはわかってないので、ちょっと調べて
みますが、あまり期待しないで下さい。

@YAGI さん
> ロードアベレージ部の1分、5分、15分のところに表示される
> 0.09などといった値は何を基準に表示されるのでしょうか?
これは後ほど。というか、正しい & わかりやすい説明をする
自信がないので、誰か答えていただけるとありがたいです。

No. 1105 # ふくし [E-mail] 2000/08/22 (火) 20:35:27
>68userさん

あれー、会社のApache1.3.9と自宅に構築中のApache1.3.12は
期待通り(というか期待を裏切ってというか)Content-length:13 を返しますねー。

これって最近話題になった改○○ー○を勝手に変えてくれる問題ですか?

No. 1106 # gongo [E-mail] 2000/08/22 (火) 22:52:29
@68user様
カラーマップについては私も調べているのですが、
どうもよくわかりません。ただ、少なくとも私の環境では
ビジュアルクラスがTrueColorとなっているため
カラーマップを書き換える事ができないようです。

>とあります。たぶん、rgb:f/f/0 = rgb:ff/ff/00 =
>rgb:ffff/ffff/0000 ですね。
>ちなみに rgb 表記は X の色が指定できるところならどこでも使えます。
〜省略〜
>なので、この環境だと 256*256*256 で 1677万色

ということはrgbを二桁(00やF0)で表せば必ず指定した通りの色が
でるのでしょうか。そうなるとなぜ四桁(FFFFなど)で表現する方法も
あるのでしょうか。逆に四桁だとカラーマップにないという事態に
なる確立が高まってしまうのでしょうか。
それと256*256*256というのはどこからわかるのでしょうか。

う〜ん、もう少し考えてみます。

No. 1107 # has 2000/08/23 (水) 00:37:34
いつもながらおかしな質問だったらごめんなさい。
perlでプログラムを作っていて、whileの中に置いたdo-whileの中で
ある条件のときはlastでdo-whileを抜けようとしていたのですが、
うまくいきませんでした。
結局いろいろ調べているうちに、lastはdo-whileをループと見なして
いないらしく、その外にあるwhileを抜けてしまっているということが
わかったのですが、これはそういうものなのですか?

No. 1108 # 68user 2000/08/23 (水) 01:59:41
@ふくしさん
> 改○○ー○
ではないんです。答えを書いちゃうと
    - $tmp = "tmpfile.$$";
    + $tmp = "/tmp/tmpfile.$$";
です。あほらしくて泣きそうです。


@has
そういうものだと思います。perl では
    do { block } while (expr)
の do は直後のブロックを実行するための命令で、
while は修飾子です。要は
    foo if ( expr );
と同じ形なわけですね。これはループではないので
last も next も redo も使えません。まぁ、
    { do { block } while (expr) }
とすれば大丈夫ですが、そこまでして do〜while を
使いたいかという話になりますか。


@gongo さん
> ということはrgbを二桁(00やF0)で表せば必ず指定した
> 通りの色がでるのでしょうか。
じゃなくて、X の内部では RGB それぞれ16ビットだけど、
16ビット×3なんていちいち指定するのがめんどくさいだろうから、
    1. ユーザは色名 (red とか) で指定できる
    2. ユーザは rgb:x/x/x rgb:xx/xx/xx rgb:xxx/xxx/xxx という
         簡略化した形式で色を指定できる
とした、ということだと思います。どの指定方法でも
XAllocNamedColor の内部で RGB それぞれ 16ビットの
色情報に展開されると。
# X のソースを持ってるなら GetColor.c あたりを
# 追っかけると、展開方法はわかると思います。

> XAllocNamedColorの一番後ろの引数には指定した色の
> 正確なRGB値が入るとのことなので調べたところ、
> Red=0 Green=0 Blue=61680 となっていました。
ということは、rgb:00/00/f0 は rgb:0000/0000/f0f0 に
展開されたということですね。

で、その 16ビットに展開した色情報が本当に使えるかどうかは、
カラーマップや X サーバ次第、ということです。

> ビジュアルクラスがTrueColorとなっているため
> カラーマップを書き換える事ができないようです。
TrueColor だと XAllocColorCells でプライベートカラーセルを
取得できないんでしたっけ? もしできないとしたら XCreateColormap
と XInstallColormap を使うんですかね (わかってない)。

> depth って、1色ごとの bit 数じゃなかったかなぁ。
これは違いました。多分。depth は1ドットごとのビット数です。

ところで、gongo さんはカラーセルを使って何をしようと
思っておられるんですか?

No. 1109 # ふくし [E-mail] 2000/08/23 (水) 02:04:17
>68userさん
あそっかぁ、、ぼくはこれを動かすために cgi-bin を 733 にしました。(^^;

>has さん
68user さんも書かれてますが、do の外側をさらに { } で囲むとあら不思議、
実行できるようです。

No. 1110 # has 2000/08/23 (水) 14:37:10
68user & ふくしさん、どうもありがとうございました。
{}でくくればいいなんて、なんか不思議な感じがします。

No. 1111 # gongo [E-mail] 2000/08/23 (水) 15:57:01
@68user様

> じゃなくて、X の内部では RGB それぞれ16ビットだけど、
> 16ビット×3なんていちいち指定するのがめんどくさいだろうから、

ということは二桁で表現するというのは本来0から65535なものを
大雑把にわけているということでしょうか。だとしたら大雑把に
分けているやつぐらいカラーマップに必ずあってほしいものですが・・・。

> # X のソースを持ってるなら GetColor.c あたりを

こ、これってどこにあるのでしょうか。

> 取得できないんでしたっけ? もしできないとしたら XCreateColormap
> と XInstallColormap を使うんですかね (わかってない)。

確かプライベートカラーセルは取得できなかったような気がします。
XCreateColormap や XInstallColormap についてはまだちょっと
詳しいことがわかりませんので本を見てみます。

> ところで、gongo さんはカラーセルを使って何をしようと
> 思っておられるんですか?

色を正確なRGB値で自由自在に扱いたいと思っております。
そして最終的には色の探索をするようなプログラムを作りたいと考えております。

以前お見せしたプログラムでは中央に窓を1個、
周りに10個の窓を表示しました。
で、各窓にはいろいろな色の服を表示しました。

具体的には中央の窓の服をターゲットとして、
周りの10個の服からユーザーがターゲットに最も近いと思われる
1つの服を選び、それによってあるアルゴリズムを通して
10個の服の色のRGB値をターゲットの色に近づけるように
改善したいと考えております。

1.服の提示(各窓の描画)
2.ユーザーによる選択
3.あるアルゴリズムを通して10個の服の色のRGB値を改善

この1から3の操作を繰り返すことで、提示されている10個の服の色が
ターゲットの服の色に収束していくようにしたいと考えております。
また実験段階なのでターゲットを表示しますが、
最終的にはターゲットの表示をやめ、ユーザーが心に思い描いた色へ
収束するようなアプリケーションを作りたいと考えております。

ここで問題なのは正確なRGB値を入れてもその色がカラーマップにない場合です。
近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性
(いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに
別のところで収束する要因がうまれてしまうことになってしまいかねないからです。

Prev< No. 1101〜1111> Next  [最新発言に戻る] [過去ログ一覧]