
No.2ベストアンサー
- 回答日時:
すみません。
ちょっと勘違いがありました。>指定したカラーの座標(X,Y)を配列で取得する方法が処理の内容でしたが、
これを単にカラーの座標(X,Y)を配列で取得する方法と受け取ってしまいました。
指定した座標の色をPictureBox上で取得するにはGetPixcelとかの関数があります。
これで1点1点比較していき、指定したカラーと一致するものを
配列に待避させていけばいいかと思います。
ただ、既にGetDIBitmapsを使っておられるとのことなので、
今後も本格的な画像処理プログラミングを考えているのなら、
このままGetDIBitmapsを使えばいいかとも思います。
>どうも実際のPictureのXYとは違い、
>独自の配列を持っているようで圧倒的にPictureの方が大きくなります。
実際のPictureのXYとは違い、配列の方は上下反転しています。
また、配列はバイトで宣言していると思いますが、
フルカラーの場合は1点につき4バイトなので配列の大きさも4倍になります。
圧倒的にpictureの方が大きくなりますの意味がちょっとよく分かりません。
hawkwindさん回答有難うございます。
PictureとGetDIBitmapsの誤差の正体が分かりました。
ScaleをTwipsPerPixelXで割っていたのに、実際のPictureのXY座標に当てはめるときにTwipsPerPixelXで掛けるのを忘れていました。
また、配列は左右反転になっていたようです。
全体的な処理も想定しているような動作になってきているので一安心といったところです。
ありがとうございました。
No.3
- 回答日時:
すみません。
ちょっと勘違いがありました。>指定したカラーの座標(X,Y)を配列で取得する方法が処理の内容でしたが、
これを単にカラーの座標(X,Y)を配列で取得する方法と受け取ってしまいました。
指定した座標の色をPictureBox上で取得するにはGetPixcelとかの関数があります。
これで1点1点比較していき、指定したカラーと一致するものを
配列に待避させていけばいいかと思います。
ただ、既にGetDIBitmapsを使っておられるとのことなので、
今後も本格的な画像処理プログラミングを考えているのなら、
このままGetDIBitmapsを使えばいいかとも思います。
>どうも実際のPictureのXYとは違い、
>独自の配列を持っているようで圧倒的にPictureの方が大きくなります。
実際のPictureのXYとは違い、配列の方は上下反転しています。
また、配列はバイトで宣言していると思いますが、
フルカラーの場合は1点につき4バイトなので配列の大きさも4倍になります。
圧倒的にpictureの方が大きくなりますの意味がちょっとよく分かりません。
No.1
- 回答日時:
>指定したカラーの座標(X,Y)を配列で取得する方法はありますか?
DIBとして配列に読み込みます。使うのはGetDIBitmapsです。
かなり難易度の高いAPIなので本を一冊購入するぐらいで臨んで下さい。
>画像自体が大きいので、
>出来るだけ早い処理で取得出来るものをと考えています
画像が大きいものを早く処理したいのですか?
処理にもよりますがフィルタですとVBだと30秒前後かかります。
私どものところでも実績はありますが、
画像処理ではC言語を使ってDLLというのが普通です。
処理が単純なら平凡にPictureBoxの縦横をFor文で回した方が楽です。
どうしても早さを求めるとなると、その勉強だけで1、2週間はとびますから。
hawkwindさん、早速回答有難うございます。
GetDIBitmapsは使用しております。ネット上で紹介されている方法をチラッと参考にした程度なので、使用方法が正しいかどうかは分かりませんが、どうも実際のPictureのXYとは違い、独自の配列を持っているようで圧倒的にPictureの方が大きくなります。
そこで、Picture / GetDIBitsの最大値 の結果をGetDIBitsで取得した配列の座標に掛けたのですが、誤差が出てしまいました。
現在の対策は実際のPictureをFor文で回す。を分割処理で、結果を得られればループ終了。のような事を考えています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#でbyte配列から画像を表示さ...
-
VBA 変数名に変数を使用したい。
-
エクセルでXY座標に並べられた...
-
構造体配列内の文字列検索のよ...
-
Dir関数で読み取り順を操作でき...
-
VB.NETの配列にExcelから読み込...
-
エクセル VBA 変数を一括で宣言...
-
レコードセットの中身を配列に...
-
VBAでMODE関数をつくる
-
Excelのメモリ(配列)の上限は2G...
-
配列のペースト出力結果の書式...
-
C#で作成したdllをVBScriptで使...
-
構造体配列の特定のメンバーをF...
-
VBScriptでCSVファイルを読み出...
-
コンボボックスのインデックス...
-
デバイスマネージャーの一覧取得
-
大量の変数を定義するにはどう...
-
Redim とEraseの違いは?
-
配列の中の最大値とそのインデ...
-
定数配列の書き方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
エクセルでXY座標に並べられた...
-
Dir関数で読み取り順を操作でき...
-
vba フィルター 複数条件 3つ以...
-
配列のペースト出力結果の書式...
-
複数のtextboxの処理を一括で行...
-
Excelのメモリ(配列)の上限は2G...
-
配列の中の最大値とそのインデ...
-
大量の変数を定義するにはどう...
-
Excel2010のinputboxで複数デー...
-
COBOLの基本的な事なので...
-
構造体配列内の文字列検索のよ...
-
VBAでMODE関数をつくる
-
Redim とEraseの違いは?
-
VBScriptでCSVファイルを読み出...
-
VB6のメモリ解放に関して
-
VB.NETの配列にExcelから読み込...
-
Segmentation Fault (メモリ制限?)
-
ActiveReports(アクティブレポ...
おすすめ情報