- ベストアンサー
Delphi6で、指定した座標のRGB値を取得する
保存された画像(bmpまたはjpg形式)の指定した座標 (仮に画面中央とします。また、マウスで指定した場所など、座標を設定した後に座標を設定しなおすことはありません。また指定した座標というのは一箇所で良いです。複数あれば、なおよいですが。) のRGB値を返すにはどうしたらよいでしょうか? テキストボックスなり、ラベルなりにR、B、G、それぞれの値を出力するのが目標です。 また、Delphiに対して理解が不足しているので、ソースプログラムや参考URLをそのまま載せていただけると嬉しいです。 方法をご存知の方いましたら、是非よろしくお願いします!m(_ _)m
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
RGBの分解にレコード型を使ったものと、GetRValue等の関数を使ったものを用意しました。レコード型の方が高速…なのかな? コード中のGetRValueの文字の上にキャレットを置き、右クリック→定義の検索を行うと関数の実体が見れます。 画像のある点の色(TColor値)を取得する基本的な方法は、TCanvas.Pixelsです。 高速に行いたい場合はTBitmap.ScanLineを使用します。 ヘルプの「VCLリファレンス」で、TBitmap、TCanvas、TColor、ColorToRGB関数等を調べると良いです。 また、ScanLineについては「ビットマップ,描画」でキーワード検索するとサンプルがあります。 ソースはこちら。 http://pastebin.com/TqHzHgXT 下にある「RAW Paste Data」からすべて選択→コピーしてください。 通常ならユニット丸ごとでなく、せいぜいimplementation部以下を提示すれば十分なのですが、まだDelphiに不慣れなご様子ですので全体をアップしました。 サービスして手順も。 1. Form1にボタン2つを配置。(Button1、Button2) 2. Memoを配置。(Memo1)縦に長めにしておくか、ScrollBarsプロパティをssVerticalに設定。 3. Button1をダブルクリック。(イベントが登録され、イベントハンドラ雛型が自動生成される) 4. 同様にButton2もダブルクリック。 5. ソースをコピーして、Delphiのエディタ画面に貼り付け。内容をすべて置き換えるようにする。 もうひとつの質問も拝見しましたが、画像処理のプログラムを制作中なんですよね? ちょっと不思議なんですが、RGBの取得方法も分からずによく出来ましたね。 どうやってたんですか?
その他の回答 (1)
- OrangeCup150
- ベストアンサー率62% (109/174)
Delphi 6 とは懐かしい。 画像を回転する処理で GetPixcel が使われています。 http://www006.upp.so-net.ne.jp/tamakoubou/delphi_cips.htm#T32 高速化する場合は ScanLine を使います。 http://www.geocities.jp/asumaroyuumaro/program/tips/ScanLine.html
お礼
回答ありがとうございます。 参考にさせて頂きたいと思います。
お礼
回答、ありがとうございます。 丁寧に教えて頂き、ありがとうございました。 勉強しながら頑張って習得していきたいと思います。