• ベストアンサー

色を合成するには

色を合成するにはどうしたらよいでしょうか。 降雨量を示す図を作ろうと思っています。 ピクチャーボックスに、すごく薄い灰色の四角形をいくつか描画し、 四角形がいくつも重なる場合は、重なり合う部分が濃くなるようにしたいのです。 以下の図で、 ABCが重なる部分が一番濃く、AとB AとC が重なる部分が次に濃く Aのみ、Bのみ、Cのみが薄くなるように描画するにはどうしたらよいでしょうか AAAAAAAAAA A A A CCCCCCACCCCCCC A C A C BBBBBBBBBBB A C B A C B A C B A CCCCCCACCCCCCC B A B A B AAAAAABAAA B B BBBBBBBBBBB API関数( StretchBlt ) を使ってみました。 異なる色を重ねた場合は濃くなりますが、同じ色は重ねても濃くならないのです 四角形と四角形の重なる部分を取り出すAPI関数もありますが、 四角形が複数だとどうしようもありません。何かよい方法はありますか? どうか、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wolv
  • ベストアンサー率37% (376/1001)
回答No.1

私は、VBはよく知らないのですが、回答がついていないようなので、 私のできる範囲で回答します。たぶん、動作は遅いです。 描画領域に対応する2次元の配列を用意する。 0などにリセットする。 それぞれの四角形を「描く」、つまり、2次元の配列の対応する要素に、 ある値を加算していく。 2次元配列に対応する図を実際に描く。 という作業でできると思います。

VT250F
質問者

お礼

昔その方法を使ったことがあります。NEC PC8001 のころでした。 今は配列の必要はありません。 処理量が多いので動作が遅いと思っていたのですが、 実際に試してみるとそうでもありませんでした。 やはり、意見を伺ってみて正解でした。ありがとうございました。

その他の回答 (2)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

画像とWEBが苦手なのではずしているかもしれないけど・・・GetPixelを調べてみましたか? 色の単位枠はピクセルです。ピクセル単位での色を取得し、色を色素分けして他の色素と加算したらできるのではないかな? 現在のソースを公開したほうがわかりやすいかも?

VT250F
質問者

お礼

ソースを公開しようとしたのですが、投降時に文字数制限がありました。 やはり、ご指摘の方法がベスト(それしかないと思われます) ありがとうございました。感謝いたします。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

手元に開発環境がないのでヒントだけを。 色はRGB(赤緑青)の光の三原色の数値の組み合わせで決定されます。 白は0,0,0、黒は255,255,255です。 ということは、色を濃くしたいということであれば、値を増やしてあげればいいですよね。 色の専門家ではないので、どのような割合で増やせば倍の濃さになるかというのはわからないのですが。

VT250F
質問者

お礼

以下の方法でうまく行きました。  Pointメソッドで座標の色を取得  色の値を256で割って余り求めを3回行い 赤緑青の三原色の値に分解  3つの値を少し小さくして、PSetメソッドで元のピクチャーに上書きする  それを四角形の枠内すべてのドットで繰り返す グラフ程度の範囲なら処理速度にそれほど影響ありませんでした ご指摘ありがとうございました。

関連するQ&A

専門家に質問してみよう