ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

GD等、インデックスカラーでグラデーションするとき、トーンジャンプさせない方法 その2

2006-03-11 17:59:02 | Weblog

 で、前回のブログでは、インデックスカラーの場合、フルカラーとちがって、そのままインデックスカラーをすると、色が急に変わるトーンジャンプが起こるので、

<<課題>>
・10個のインデックスカラーを使って、(仮に色は)白から赤に変わる
 グラデーションを書きなさい。

というようなときは

<<解法>>
・まず、インデックスカラーを
  R=10%,R=20%、。。。R=100%(=255)
 となるように、10%おきにとる。

・X座標の値を基準に見て、仮にXが33%のところだとしたら、
 近傍の2点、30%、と40%のインデックスカラーを、
 同じX座標にある点(Y座標0から50ドットまでの高さで書くとしたら、50ドット分)を
  30%のドット3割(15個)
  40%のドット7割(35個)
 書く。ということになる。

 ということまで書いた。今回はその先




で、ここで、問題が起こる

<<問題点>>
1.点の割合は示したけど、実際に、どうおくの?上の例だと、30%のドット、15個を上に並 べてしまうと、必ず薄い色→濃い色の順になってしまい、今度、縞模様になってしまう。
 
2.インデックスカラーが、まったく関係ない2色だったらどうするか




■問題点1:色の並べ方
 たぶん、これを先生は説明したかったから、これを問題に出したのだと思います。

 単純にならべると、必ず薄い色→濃い色の順になってしったりして、模様ができます。
 そこで、決まりを作った場合、ノイズと呼ばれる、その規則を破るものを入れます。
 →発展途上国のレンダリングエンジンなどには、入っていないことがある
  どこの国とあえて書かないけど。。。

 DTPのほうでは、セル、スーパーセルというような概念もありますが、それについて説明したかったんだと思います。




■問題点2:適切なインデックスが無かったら

 どーしょーもないです。

 たとえば上記の問題で、インデックスにすべて、G(緑)50%を含んでいたら、白から赤のグラデーションは、そのインデックスでは作れません。緑色がかならず入ってしまいますから。

 たしかに、非常に高い解像度を持っている場合、

Rが、0,20,40,60,80,100、G,Bは0
Gが、0,20,40,60,80,100、R,Bは0
Bが、0,20,40,60,80,100、G,Rは0

というインデックスを作り、ある点におけるR、G、B、それぞれを、上記の方法で色を塗ると、そのR,G,Bの3点をあわせて1つの色とみなすことが、出来なくは無いですが、解像度が低いと、どーしょーもなくなります。

 とりあえず、RGBすべて散らしてもつとすると、6X6X6=216個のインデックスを作って、上記処理をやることになります。(0%,20%,40%,60%,80%,100%の6段階)
 
 ただ、基本的に、インデックスが悪いと、ひょうげんしにくいです。

という、この事実が、べつのところで、問題になったりする。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

なんで、メーリングリストに開封確認が必要なんだろう??

2006-03-11 17:10:28 | Weblog

さっき、あるメーリングリストのメールを開けたら
「開封確認を要求しています。開封確認に答えますか?」
みたいなメッセージがでてきた。

不気味なんで「いいえ」にしたんだけど。。

なんで、メーリングリストのメールに開封確認が必要なんだろう
(ちなみに、メールの内容は、宣伝みたいな感じだった??)




「開封したよ」っていうメールが管理者にいくとしたら。。

 でも、管理者は、届かなかったら、届いてないよ!っていうメールが
帰ってくるから、それでいいはずだし(見てるかどうかなんて、管理者
のしったこっちゃない)

 発信者に、開封確認が来るとしたら、相当まずい。
 悪意のある人が、メーリングリストに参加して、開封確認で、メールアドレスを取得できてしまう。

 つーか、そもそも、開封確認なんて,メーリングリストでしたら、すごい量のメールがリプ来されてくる可能性があるわけでえ。。。??へんへんへん?

 ひょっとして、本当は、メーリングリストから来たメールじゃないのかなあ。。
 (それっぽく見えているだけで)




 とにかく、変なメールだ。。??
 それとも、最近のメーリングリストって、何かの理由で、開封確認を求めているのかなあ??
 な、こたーないよねえ。。



  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GD等、インデックスカラーでグラデーションするとき、トーンジャンプさせない方法

2006-03-11 14:15:07 | Weblog

 今日、マクドナルドでサラダマリネベーグルセットを食べてたら、後ろのほうから、あれは専門学校生なのかなあ(姿は見えない位置だった)から、こんな発言が聞こえた。

 「10個の領域にわけて、それぞれに色を塗れば、グラデーションできるじゃん」

 できなーーい!!って。

 そんじゃー、トーンジャンプ(切り替わったところで明らかに色が変わる)しちゃうじゃん!!10個の色をならべても、それは、10個の箱に見えちゃうよ!!




 多分、課題は、こういうものだと思う。

■■課題
(1)10個のインデックスカラーを使って、(仮に色は)白から赤に変わるグラデーションを書きなさい。

(2)一般にN個のインデックスがあたえられたとき、RGB=(X1、Y1、Z1)からRGB=(X2,Y2,Z2)にグラデーションで変化させたいときには、どのようにしますか?答えなさい。




 で、これ、はじめに、まず、インデックスカラーでなく、フルカラーなら、こうやりますよね。

 かりに、範囲が、X=0~300ドットにおいて、Rの値を0~255にグラデーションで変えたいとき、たとえば、100ドットの位置だったら、その色は、

100ドット目のR=(100-0)/(300-0)*(255-0)

で一般には
Xnドット目のRn=(Xn-X1)/(X2-X1)*(R2-R1)
で求めたRnの値を整数化して、その色で塗ればいい。
でも、これだと、10個のインデックスに収まらない。




 そこで、もう1つの考え方がある。
 これは、実際にはきれいに見えないことが多いんだけど、

 かりに、範囲が、X=0~300ドットにおいて、Rの値を0~255にグラデーションで変えたいとき、たとえば、100ドットの位置だったら、そのX=100ドットめに並ぶ、縦のドット(Y座標分)のうち、100/300、つまり、3分の1はR=255で、のこりをR=0で塗る。まあ、散らして塗らないと、固まって見えてしまうので、散らして塗る。
 これが、PSプリンタなどで行うグラデーションの方法を(チョー簡単に)説明したものだ。(実際はもっと複雑)




したがって、課題のインデックスカラーで行う場合はこうなる。

10色をR=10%,R=20%、。。。R=100%(=255)となるように、10%おきにとる。

 かりに、範囲が、X=0~300ドットにおいて、Rの値を0~255にグラデーションで変えたいとき、たとえば、X=100ドットの位置だったら、その色は、約33%にしないといけないから、
 30%のインデックスカラーを7割、
 40%のインデックスカラーを3割
使う。
 だから、高さY=0から100だったとすると、X=100ドットの箇所では、Y100ドット中、30ドットを30%、70ドットを40%の色で塗ることになる。




 一般には、任意のX座標において、何パーセントで塗らないといけないかを出して、
 インデックスカラーの中に、その%とまったく同じものがあれば、
    そのインデックスカラーでぬる。

 たいてい、ないので、その場合は、近傍の色を2つ取り出す。

 で、その色を混ぜる。混ぜる比率は、2つの色の近さによる

 そして、それを、Y座標に割りふる。

 この割り振り方が問題になるけど、もうじき、英会話入門がはじまってしまうので、今度書きますね。

 れっつ・すたでぃー・いんぐりっしゅ・とぅぎゃざー


  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする