CBitmap::LoadBitmapをピクセル(ビット)ごとに取り扱いたい。

[戻る]
のん 2004/04/06(火) 07:24:53
CBitmap::LoadBitmapをピクセル(ビット)ごとに取り扱いたいのですがどうすればよろ
しいのでしょうか?

PATIO 2004/04/06(火) 10:29:20
質問の意味がよく分かりません。

CBitmap::LoadBitmapは、ビットマップをリソースから読み込むものだと
思いますが、これと「ピクセル(ビット)ごとに取り扱いたい」という言葉が
どう結びつくのでしょう?

「使用上の注意」をよく読んで必要な情報は全て開示してください。
少なくとも守秘義務が生じない情報なら全て開示しないと状況がつかめません。
あと、質問内容ももっと噛み砕いて誰が聞いてもわかるように書いてください。
その為には、あなた自身が問題をもっと整理する必要があるかもしれません。

のん 2004/04/06(火) 21:36:56
失礼しました。PATIOさん。
CBitmap::LoadBitmapから読み込んだリソース(たとえば256x256だとすると)
を(x,y) の座標を指定して、ビットごとに処理を行いたいのですが、
どうすればよいでしょうか?
(たとえば、(3,3) のピクセルを白にする。)

wood 2004/04/07(水) 03:41:24
お断り、発言に対する「助言」のため無視なさっても結構です

>PATIO 氏>「使用上の注意」をよく読んで必要な情報は全て開示してください。
は

「のん さん」の開発環境(OS・VCのバージョン)等を書きさらに
どのようなソースコードを自力で学習していて、どんな場所の部分につまずいて
いるのか
躓いてている部分の前後関係がわかるソースの提示をしてその上で
理論説明やら、自分としてどうしたいとか説明してください


ということです

PATIO 2004/04/07(水) 10:34:45
言いたい事はwoodさんが言ってくれているので、
それについては書きません。
ただ、質問−回答の流れがスムーズに進むために必要な事なので
その辺については御理解ください。
情報提供が事前に行われていると直ぐ本題に入れるので効率がいいのです。

CBitmapを使っている事からするとMFCを使用していますね。
CBitmapを直接扱う事は出来ないので、画面のデバイスコンテキスト(以下DC)と
コンパチブルなメモリDCを作成して、そこにBitmapをセレクトします。
もう一枚、メモリDCを用意してそこにCDC::BitBlt等で貼り付けます。
これに対してCDCクラスのメソッドを使ってピクセル単位の処理をします。
あとは、そのビットマップを画面に貼るなり、ファイルに書き出すなりすれば
よいだけの話です。
今、提示されている内容から書けるのはこのくらいだと思います。

のん 2004/04/08(木) 08:39:08
woodさん、PATIOさん どうも失礼しました。
しかし、今のところ、コーディングの段階ではなく、
イメージを作っているところなので、ソースは、ありません。
実際やろうとしていることは、メモリデバイスコンテキスト上
の画像にビットマップファイルをテクスチャマッピング
しようと考えていますが、貼り付け先になるオブジェクトは
すでに、メモリデバイスコンテクスト上にあると考えています。
あとは、リソースのビットマップファイルを配列として扱えれば、
できる、と考えていますが、どうすればよいのかよくわかりません。
(OSは、XP、VC++6.0を使用しています。)

PATIO 2004/04/08(木) 11:16:17
>あとは、リソースのビットマップファイルを配列として扱えれば、
>できる、と考えていますが、どうすればよいのかよくわかりません。

この部分の表現がちょっとわかりません。
一つのビットマップを画素子の配列と見ると言うことですか?
それともビットマップの配列なんでしょうか?
画面上の座標のXとYで二次元の配列をイメージしたものと考えると
いう意味ですか?
私が既に書いていますが、ビットマップ上の画素子を扱うには
いずれにせよ、一旦DC上にコピーしないと駄目だったと思います。
単純にそのDCで選択しただけでは駄目だったような。
こういう事は議論するより試した方が早いです。
簡単なプログラムを作成して試してみてください。
一旦、メモリDCにコピーしてコピーしたメモリDCを保持しておけば、
そのDC上でGetPixel,SetPixelで処理できますよね。
ただ、GDIは遅いです。
スピードが要求される処理では、かなりのマシンパワーが必要です。
スピードが必要であれば、DIBにしてアドレス指定でデータを弄る必要が
あるかもしれません。
そうなるとGDI関連は使えないのでかなり泥臭い処理が必要になります。
大昔のVRAMを直接触るようなイメージなんですが、わかりにくいですかね。

PATIO 2004/04/08(木) 11:21:17
追伸。

ビットマップを直接扱う気があるのであれば、
ビットマップの構造の知識が必要です。
ですから技術的な可能/不可能や難易度を判断する上では、
設計段階でもそういった知識は必要でしょう。
一度、調べてみる事をお勧めします。

のん 2004/04/08(木) 21:53:31
PATIOさん、詳しい説明ありがとうございます。
リソースのビットマップファイルを配列として扱うというのは、
画面上の座標のXとYで二次元の配列をイメージしたものと考えると
いう意味です。(PATIOさんのお考えのとおりです)
DC上にいったんコピーして、取り扱う方向で小さなプログラムを
作りたいと思います。

のん 2004/04/09(金) 08:16:00
[[解決]]
ひとまず、イメージができたので、解決とします。
つづきは、ソースができしだい載せたいとおもいます。
PATIOさんどうもありがとうございました。

古いスレッドには追加発言できません。