68user's page 掲示板

Prev< No. 1108〜1116> Next  [最新発言に戻る] [過去ログ一覧]
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で用意したアルゴリズムでの有効性
(いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに
別のところで収束する要因がうまれてしまうことになってしまいかねないからです。

No. 1112 # gongo [E-mail] 2000/08/23 (水) 19:30:47
@68user様
カラーマップの内容を知るための例みたいなのが本に載っていたので
試してみました。以下のtmp[k]はXColor構造体です。
尚、この例はRGB各32階調カラーマップのカラーセル内の表示色値を得る
といったものだそうです。

-----------------------------------------------------------------------------
    cmap = DefaultColormap(dummy_dpy,dummy_screen);

    for(k=0; k<32; k++)
        {
            tmp[k].pixel = k | k << 5 | k << 10;
            tmp[k].pad = 0;
            tmp[k].flags = DoRed | DoGreen | DoBlue;
            XQueryColor(dummy_dpy,cmap,&tmp[k]);
        }
-----------------------------------------------------------------------------

で、結果的に

-----------------------------------------------------------------------------
Red=0 Green=0 Blue=0 Pixel=0
Red=2114 Green=2114 Blue=2114 Pixel=1057
Red=4228 Green=4228 Blue=4228 Pixel=2114
Red=6342 Green=6342 Blue=6342 Pixel=3171
〜省略〜
Red=61306 Green=61306 Blue=61306 Pixel=30653
Red=63420 Green=63420 Blue=63420 Pixel=31710
Red=65535 Green=65535 Blue=65535 Pixel=32767
-----------------------------------------------------------------------------

といったようにPixel値が32767まできました。
ということは私の環境では 32*32*32=32768色 が
カラーマップにエントリされているようです。
実際 Red=61306 Green=4228 Blue=6342 などのように
色を指定したところ、XAllocColorを通してもRGB値が
変化しませんでした。

TrueColorということでカラーマップを書き換えられないので
この範囲内でうまくやりくりするしかないのでしょうか・・・。
XCreateColormap と XInstallColormap について
本を見てみましたが、まだよくわかりません。

No. 1113 # にゃ 2000/08/23 (水) 22:11:47
>あほらしくて泣きそうです。
なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^;

しかし、こういうライブラリを作っておくと便利そうですね。
勉強になりました。

No. 1114 # 68user 2000/08/24 (木) 00:43:20
えっと、手短に返答をば。

@has
> {}でくくればいいなんて、なんか不思議な感じがします。
そうか、よく考えてみれば、変な仕様なんだな。
でも、ちょっと試してみましたが、next/last/redo が
そのまんま使えるわけでもないようで。


@gongo さん
> ということは二桁で表現するというのは本来0から65535なものを
> 大雑把にわけているということでしょうか。
です。ちと調べてみたところ、rgb:e/8/2 ってのは
    e は 14/15 なので、ffff の 14/15 = 61166
    8 は 8/15 なので、ffff の 8/15 = 34952
    2 は 2/15 なので、ffff の 2/15 = 8738
で、rgb = 61166/34952/8738 になるようです。

> 確かプライベートカラーセルは取得できなかったような気がします。
これはやはりできないようですね。

> こ、これってどこにあるのでしょうか。
例えば http://www.ring.gr.jp で「R6.4」などというキーワードで
探せば、http://ring.etl.go.jp/pub/X/opengroup/R6.4/tars/
行けます。

XFree86 など各種 X サーバというのは、(基本的には) これに X サーバの
実装を追加したものです。こっちのソースは例えばここ。
    http://ring.etl.go.jp/pub/XFree86/

> 近い色で勝手に代用されてしまうと、3で用意したアルゴリズムでの有効性
> (いかによりよい色へどのくらいの回数で収束するかなど)を確認したいのに
> 別のところで収束する要因がうまれてしまうことになってしまいかねないからです。
なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。


@にゃ さん
>なるほど。やはりopenの返り値は常にチェックすべきなのですね。(^_^;
ですね。ちなみにこれまでで一番はまったのは CGI やりはじめの頃。
    open(IN,"foo |");
ってのが動かない。理由は foo が core dump してたから、ってのです。
コマンドラインからは動くし、nobody 権限で動いていたから core が
できないので core 吐いてることがわからないという…。


@YAGI さん
> ロードアベレージ部の1分、5分、15分のところに表示される
> 0.09などといった値は何を基準に表示されるのでしょうか?
FreeBSD の w(1) から引用すると、
    平均負荷は、最近の1分、5分、15分間における実行キュー内の
    ジョブ数の平均値を表します。
です。すいませんが、わからなければ再度質問して下さい。
# これを説明し出すと長いんだわ、これが。

No. 1115 # gongo [E-mail] 2000/08/24 (木) 01:39:36
@68user様
いろいろありがとうございました。

>なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。

なので、カラーマップに存在する色だけを使って動くように
頑張ってみます。今後とも宜しくお願い致します。

No. 1116 # 68user 2000/08/24 (木) 02:17:51
>> なるほど。でも、色が足りないのは根本的には仕方がないですよねぇ。
> なので、カラーマップに存在する色だけを使って動くように
最初は TrueColor でも XCreateColormap/XInstallColormap で
いけるんじゃないか思いました。でも、手元のサンプルプログラムが
ことごとく動かないので、やっぱり TrueColor でもダメなのかと
あきらめかけました。ところが、X の設定を 8bpp (depth8) に
変えて PseudoColor にしても同じくサンプルプログラムが動きませんでした。

というわけで、サンプルプログラムがダメなのか、もともと
TrueColor だと不可能なのかはわかりませんでした。

ちなみに何をしたかったかと言うと、
    - netscape の起動時に -install オプションを付けると、
        マウスが netscape の中に入ったときだけカラーマップが
        変更され、netscape だけが色を独占できる
    - その代わり、netscape 以外の部分の色はちょっと変になる。
    - マウスを netscape から外すと、netscape の中の色が変になり、
        それ以外の色が正常に戻る
というようなやつです。

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