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

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

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

Re[3]: ヒストグラム


(過去ログ 10 を表示中)

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

■1622 / inTopicNo.1)  ヒストグラム
  
□投稿者/ スティッチ (7回)-(2007/02/28(Wed) 19:48:06)

分類:[VB.NET (Windows)] 

質問させていただきます。

開発環境はVB.netです。

フォーム上のPictureboxに画像を表示します。その画像を白黒反転し再描画します。
その白黒画像に横一本線を引きます。その引かれた線に該当するピクセルのヒストグラムをだすにはどうしたらいいですか?
白黒なので値は0か255。

//imgはPictureboxの画像をBitmap型で入れてます。
//tmpは線を引いた行
For i = 0 To img.Width - 1
img.SetPixel(i, img.GetPixel(i, tmp(j)).R, Color.Green)
Next

For i = 0 To 255
g.DrawLine(New Pen(Color.Blue), 10 + i, 290, 10 + i, 290 - tmp(i))
Next 'i

これで実行すると
img.SetPixel(i, img.GetPixel(i, tmp(j)).R, Color.Green)
の部分が「パラメータが無効です」というエラーがでてしまいます。
どうしたらいいでしょうか?
引用返信 編集キー/
■1630 / inTopicNo.2)  Re[1]: ヒストグラム
□投稿者/ Jitta (276回)-(2007/03/01(Thu) 07:53:21)
で?
パラメータが無効なんだから、どのパラメータが無効なのか調べて、無効でない値に変えたらええんちゃうん?
引用返信 編集キー/
■1669 / inTopicNo.3)  Re[1]: ヒストグラム
□投稿者/ Jitta (279回)-(2007/03/01(Thu) 21:41:29)
Jitta さんの Web サイト
No1622 (スティッチ さん) に返信
Color.R が byte 型で、Bitmap.SetPixcel メソッドの第二引数は int 型。

 ってか、ヒストグラム、分布図ですよね?
参考: http://aoki2.si.gunma-u.ac.jp/lecture/Dosuu/histogram.html
このコードだと、「座標(i, tmp(i)) が白か黒か」を見るためのグラフになりません?
ヒストグラムにするなら、i は関係なく、座標(i, tmp(i)) の白と黒の数を数えないとダメなんじゃない?

> For i = 0 To 255
> g.DrawLine(New Pen(Color.Blue), 10 + i, 290, 10 + i, 290 - tmp(i))
> Next 'i
ぐはっ!こんなことするなぁ〜!

 Pen は、Dispose が(たぶん)必要なオブジェクトです。こんなことをすると、解放できない Pen インスタンスが、255個も出来てしまいます。
Dim BluePen As Pen = New Pen(Color.Blue)
For i = 0 To 255
  g.DrawLine(BluePen, 10 + i, 290. 10 + i, 290 - tmp(i))
Next
' BluePen.Dispose() ' Color.Blue がシステム定義カラーだから、要らないかもしれない

引用返信 編集キー/
■1670 / inTopicNo.4)  Re[2]: ヒストグラム
□投稿者/ Hirotow (40回)-(2007/03/01(Thu) 22:12:07)
Hirotow さんの Web サイト
> Dim BluePen As Pen = New Pen(Color.Blue)
> For i = 0 To 255
>   g.DrawLine(BluePen, 10 + i, 290. 10 + i, 290 - tmp(i))
> Next
> ' BluePen.Dispose() ' Color.Blue がシステム定義カラーだから、要らないかもしれない
>

Pens.Blue とかあったような。
引用返信 編集キー/
■1673 / inTopicNo.5)  Re[3]: ヒストグラム
□投稿者/ シャノン (93回)-(2007/03/02(Fri) 09:19:48)
No1670 (Hirotow さん) に返信
>>Dim BluePen As Pen = New Pen(Color.Blue)
>>For i = 0 To 255
>>  g.DrawLine(BluePen, 10 + i, 290. 10 + i, 290 - tmp(i))
>>Next
>>' BluePen.Dispose() ' Color.Blue がシステム定義カラーだから、要らないかもしれない
>>
>
> Pens.Blue とかあったような。

new Pen( Color.Blue ) の場合は Dispose 要るけど、Pens.Blue の場合は要らないというか、しちゃいけない。
引用返信 編集キー/
■1676 / inTopicNo.6)  Re[2]: ヒストグラム
□投稿者/ 渋木宏明(ひどり) (137回)-(2007/03/02(Fri) 09:46:04)
渋木宏明(ひどり) さんの Web サイト
>Color.Blue がシステム定義カラーだから、要らないかもしれない

そんなこたないです。
何色のペンであろうとも、ユーザが作成したペンならば(いつか)廃棄しなくてはなりません。

引用返信 編集キー/
■1688 / inTopicNo.7)  Re[3]: ヒストグラム
□投稿者/ スティッチ (8回)-(2007/03/02(Fri) 15:48:30)
返信遅れて申し訳ございません。
みなさま返信ありがとうございました。

For i = 0 To img.Width - 1
If (img.GetPixel(i, tmp(j)).R = 255) Then '白ならば白色で描画
g.DrawLine(WhitePen, i, tmp(j), i, tmp(j) + img.GetPixel(i, tmp(j)).R)
Else '黒ならば黒色で描画
g.DrawLine(BlackPen, i, tmp(j), i, tmp(j) + 255)
End If ' ヒスト
Next ' i
WhitePen.Dispose() '解放
BlackPen.Dispose() '解放

これでなんとか線のヒストグラムがとれました。ありがとうございました。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -