C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Pointメソッドの変換


(過去ログ 75 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■43704 / inTopicNo.1)  Pointメソッドの変換
  
□投稿者/ ki-a (1回)-(2009/11/16(Mon) 22:10:55)

分類:[VB.NET/VB2005 以降] 

VB6.0のコードをVB2008に変換させる作業を行っているのですが、Pointの変換が上手くできません。
プログラムは影のある画像、影の無い画像を用いて影の深さの画像を抽出するプログラムです。

VB6.0のコードでは

dim c(645,485),rc(645,485),gc(645,485),bc(645,485) As Long

c(i,j) = Form2.Picturebox1.Point(i,j)
rc(i,j) = (c(i,j) And &HFF)
gc(i,j) = (c(i,j) And 65280) \ 256&
bc(i,j) = (rc(i,j) + gc(i,j) + bc(i,j))/3

となっており、Pointメソッドを使ってRGB値を取得しています。
これをGetpixelに置き換えるので
dim c(645,485),rc(645,485),gc(645,485),bc(645,485) As Long
Dim bmp As Bitmap = Form2.Picturebox2.Image

c=(i,j) = bmp.GetPixel(i, j).ToString()
rc(i,j) = (c(i,j) And &HFF)
gc(i,j) = (c(i,j) And 65280) \ 256&
bc(i,j) = (rc(i,j) + gc(i,j) + bc(i,j))/3


と置き換えたのですが、上手く読み込んでくれません。
上記のコードをどの様に直せばよろしいでしょうか。 ご指導お願いします。

引用返信 編集キー/
■43706 / inTopicNo.2)  Re[1]: Pointメソッドの変換
□投稿者/ Hongliang (513回)-(2009/11/16(Mon) 22:47:19)
まず、VB6 の次、VB7(VB.NET2002)からは Integer と Long のサイズが変わりました。それぞれ、16bit 整数値から 32bit 整数値に、32bit 整数値から 64bit 整数値になっています。
Bitmap の GetPixel メソッドで取得できるのは整数値ではなく、Color 型のオブジェクトです。Color 型には R、G、B という名前の、その色の RGB の各要素を取得するためのプロパティが用意されていて、演算は不要です。

GetPixel が返すのは Color 型ですから、変数 c も整数型の配列ではいけません.
Color 型の配列である必要があります。
また、RGB はプロパティ一つで取れるので、rc/gc/bc 各配列は不要かも知れません。

それから、Bitmap の GetPixel/SetPixel メソッドはパフォーマンスコストが比較的大きい処理です。
処理速度に問題を感じるなら、色取得・設定には他の方法を考える必要があるかも知れません。
引用返信 編集キー/
■43708 / inTopicNo.3)  Re[2]: Pointメソッドの変換
□投稿者/ ki-a (2回)-(2009/11/16(Mon) 23:42:25)
No43706 (Hongliang さん) に返信
> まず、VB6 の次、VB7(VB.NET2002)からは Integer と Long のサイズが変わりました。それぞれ、16bit 整数値から 32bit 整数値に、32bit 整数値から 64bit 整数値になっています。
> Bitmap の GetPixel メソッドで取得できるのは整数値ではなく、Color 型のオブジェクトです。Color 型には R、G、B という名前の、その色の RGB の各要素を取得するためのプロパティが用意されていて、演算は不要です。
>
返信ありがとうございます! Getpixelメソッドは色の整数値を取得出来る物だと思い込んでいました…。

> GetPixel が返すのは Color 型ですから、変数 c も整数型の配列ではいけません.
> Color 型の配列である必要があります。
> また、RGB はプロパティ一つで取れるので、rc/gc/bc 各配列は不要かも知れません。
丁寧にありがとうございます。rc/gc/bcの配列についてもう1度整理してみます。

> それから、Bitmap の GetPixel/SetPixel メソッドはパフォーマンスコストが比較的大きい処理です。
> 処理速度に問題を感じるなら、色取得・設定には他の方法を考える必要があるかも知れません。
当面はプログラムを動かす事が目標なので、progressbarをつけて様子を見て、別の手段もあるか検討してみます。

今回は丁寧なご指摘、本当にありがとうございました!
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -