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

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

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

RGB値


(過去ログ 8 を表示中)

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

■7867 / inTopicNo.1)  RGB値
  
□投稿者/ カラー 二等兵(1回)-(2006/10/28(Sat) 23:53:11)

分類:[VB.NET] 


分類:[VB.NET] 

RGB値を取得するにはどのようにしたらいいんですか?
Dim RGB_avg As Integer

For i = 0 To PictureBox1.Image.Width Step 1
For j = 0 To PictureBox1.Image.Height Step 1

と,ここまではわかるのですがここからわかりません。
お願いします。


0
引用返信 編集キー/
■7873 / inTopicNo.2)  Re[1]: RGB値
□投稿者/ επιστημη 中将(264回)-(2006/10/29(Sun) 03:40:59)
επιστημη さんの Web サイト

分類:[VB.NET] 

> For i = 0 To PictureBox1.Image.Width Step 1
> For j = 0 To PictureBox1.Image.Height Step 1
>
> と,ここまではわかるのですがここからわかりません。

PictureBox.Image のメソッド GetPixel(x,y) が点(x,y)の色:Color を返します。
さらに、Color には R, G, B ってプロパティがあります。

# ってことを、マニュアルからたぐっていけばよかったのよ。


0
引用返信 編集キー/
■7874 / inTopicNo.3)  Re[2]: RGB値
□投稿者/ カラー 二等兵(2回)-(2006/10/29(Sun) 03:53:40)

分類:[VB.NET] 

すいません「## ってことを、マニュアルからたぐっていけばよかったのよ」
の意味がわからないです。何度もすいません。


0
引用返信 編集キー/
■7875 / inTopicNo.4)  Re[3]: RGB値
□投稿者/ επιστημη 中将(265回)-(2006/10/29(Sun) 04:13:32)
επιστημη さんの Web サイト

分類:[VB.NET] 

> すいません「## ってことを、マニュアルからたぐっていけばよかったのよ」
> の意味がわからないです。何度もすいません。

…あー、そか。 PictureBox.ImageからBitmapを作らないとGetPixelできないのか。
BitmapはImageを引数にしたコンストラクタをもってるから、
これ使ってBitmapをこさえれば、そいつに対してGetPixel(x,y)できるんじゃないかしら。試してみて。


0
引用返信 編集キー/
■7876 / inTopicNo.5)  Re[4]: RGB値
□投稿者/ カラー 二等兵(3回)-(2006/10/29(Sun) 04:32:37)

分類:[VB.NET] 

■For i = 1 To PictureBox1.Image.Width Step 1
For j = 1 To PictureBox1.Image.Height Step 1
Bitmap.GetPixel(i, j)
'Bitmap.SetPixel(i, j, Color.Black) 'カラーを黒に設定
Next
Next
PictureBox1.Image = Bitmap

こういうことですか!?



0
引用返信 編集キー/
■7877 / inTopicNo.6)  Re[5]: RGB値
□投稿者/ επιστημη 中将(266回)-(2006/10/29(Sun) 05:17:26)
επιστημη さんの Web サイト

分類:[VB.NET] 

> こういうことですか!?

…やってみました?

---- PictureBox1 のイメージをひっくり返して PictureBox2 に描く。

Dim source As Bitmap = PictureBox1.Image
Dim target As Bitmap = New Bitmap(source.Width, source.Height)
Dim x As Integer
Dim y As Integer
For x = 0 To source.Width - 1
For y = 0 To source.Height - 1
target.SetPixel(source.Width - x - 1, source.Height - y - 1, source.GetPixel(x, y))
Next
Next
PictureBox2.Image = target


0
引用返信 編集キー/
■7878 / inTopicNo.7)  Re[6]: RGB値
□投稿者/ カラー 二等兵(4回)-(2006/10/29(Sun) 08:34:52)

分類:[VB.NET] 

ありがとうございます。

cColor = bBitmap.GetPixel(i, j); // ピクセルの色の取得
iAverage = GetColorAverage(cColor); // RGB の平均値の取得

C#ではこのようにかかれているのですがこれをVBで書くとどうなるんですか?

エラーがでてしまいます。


0
引用返信 編集キー/
■7880 / inTopicNo.8)  Re[7]: RGB値
□投稿者/ επιστημη 中将(267回)-(2006/10/29(Sun) 11:19:54)
επιστημη さんの Web サイト

分類:[VB.NET] 

どんなコードの/どの行に/どんなエラーが出るかを書くべし。

> エラーがでてしまいます。

これだけでは小学生以下。


0
引用返信 編集キー/
■7886 / inTopicNo.9)  Re[7]: RGB値
□投稿者/ ROY 伍長(40回)-(2006/10/29(Sun) 14:48:25)

分類:[VB.NET] 

No7878に返信(カラーさんの記事)
> ありがとうございます。
>
> cColor = bBitmap.GetPixel(i, j); // ピクセルの色の取得
> iAverage = GetColorAverage(cColor); // RGB の平均値の取得
>
> C#ではこのようにかかれているのですがこれをVBで書くとどうなるんですか?
>
> エラーがでてしまいます。
>

上記のコードにいたる経過がわからないのでエラーの原因はなんともいえませんが
cColor = bBitmap.GetPixel(i, j)  ' ピクセルの色の取得
iAverage = GetColorAverage(cColor) ' RGB の平均値の取得

単純にセミコロン';'を取り除き、 C#コメントの // を VBのコメントの '
へ置き換えればよいのでは?



0
引用返信 編集キー/
■7926 / inTopicNo.10)  Re[8]: RGB値
□投稿者/ カラー 二等兵(5回)-(2006/10/31(Tue) 00:43:04)

分類:[VB.NET] 

'画像の二値化処理
For i = 1 To PictureBox1.Image.Width Step 1
For j = 1 To PictureBox1.Image.Height Step 1
cColor = Bitmap.GetPixel(i, j)
Bitmap.SetPixel(i, j, Color.Black) 'カラーを黒に設定
Next
Next
PictureBox1.Image = Bitmap

このようにソースをかいてみたんですが
cColor = Bitmap.GetPixel(i, j)
の行で、
'System.ArgumentOutOfRangeException' の初回例外が System.Drawing.dll で発生しました

というエラーがでてしまいます。このエラーはどういうことなのでしょうか?


0
引用返信 編集キー/
■7932 / inTopicNo.11)  Re[9]: RGB値
□投稿者/ ROY 伍長(41回)-(2006/10/31(Tue) 06:17:47)

分類:[VB.NET] 

エラーが発生するときの iとjの値を確認しましたか?



0
引用返信 編集キー/
■7933 / inTopicNo.12)  Re[9]: RGB値
□投稿者/ επιστημη 中将(268回)-(2006/10/31(Tue) 07:22:48)
επιστημη さんの Web サイト

分類:[VB.NET] 

> cColor = Bitmap.GetPixel(i, j)
> の行で、
> 'System.ArgumentOutOfRangeException' の初回例外が System.Drawing.dll で発生しました
>
> というエラーがでてしまいます。このエラーはどういうことなのでしょうか?

僕の示した No7877 をろくに読んでないってことだなぁ orz


0
引用返信 編集キー/
■7936 / inTopicNo.13)  Re[10]: RGB値
□投稿者/ ゆめ 二等兵(3回)-(2006/10/31(Tue) 08:53:08)

分類:[VB.NET] 

あ、まだ確認してませんでした。すみませんきちんと確認したいと思います。

いやきちんと読んだんですけどね…理解が不十分なようです。
>

0
引用返信 編集キー/
■7938 / inTopicNo.14)  Re[11]: RGB値
□投稿者/ Blue 少尉(122回)-(2006/10/31(Tue) 09:30:34)

分類:[VB.NET] 

というか、ヘルプにまんま載っているんだけど。

[MSDN2]Bitmap.GetPixel メソッド
http://msdn2.microsoft.com/ja-jp/library/system.drawing.bitmap.getpixel.aspx
<quote>
例外

例外の種類
ArgumentOutOfRangeException

条件
x が 0 未満か、または Width 以上です。
または
y が 0 未満か、または Height 以上です。
</quote>


0
引用返信 編集キー/
■7939 / inTopicNo.15)  Re[12]: RGB値
□投稿者/ ぽぴ王子 軍曹(78回)-(2006/10/31(Tue) 09:51:03)
ぽぴ王子 さんの Web サイト

分類:[VB.NET] 

No7938に返信(Blueさんの記事)

ゆめさんって誰ですか?

> いやきちんと読んだんですけどね…理解が不十分なようです。
επιστημηさんの言う「読む」は、読んで内容をしっかり把握するところ
までを指しているのではないかと思います。
あるいは「読む」が普通に記事を読むことだったとしても、その後の流れを見る
限りちゃんと理解していないというのはわかるわけで、「ろくに」読んでいない
という指摘になるのも仕方がないかと。

ArgumentOutOfRangeException はBlueさんご指摘の通りヘルプに載っているので
見ていただければいいとして、Bitmapという名の変数?が使われているのがちょっ
と気になりました。Bitmapって型じゃなかった?それともbBitmapの間違い?
(どちらにしても作成している部分がないので、ビットマップを作成せずにピク
セル操作するのかな?とは思いましたけど)

もう少しがんばってみてください。

0
引用返信 編集キー/
■7944 / inTopicNo.16)  Re[13]: RGB値
□投稿者/ まきなす 二等兵(6回)-(2006/10/31(Tue) 11:54:43)

分類:[VB.NET] 

カラー(ゆめ?)さん こんにちは
ここの皆さんは優しいので、できれば自分で解決できるように指導してくださっています。

RGB値を取得したいのですか?
画像の二値化処理がやりたいのですか?
たぶん、目的のものが得られるであろう一例を載せておきます。
この方法が最善というわけではありません。
このままで動作するはずですが、そのまま使うのではなく
しっかり勉強して自分のものにしてください。

'2値化
Private Sub TwoValue()
Const THRESHOLD As Integer = 128
Dim img As Bitmap = PictureBox1.Image
If img Is Nothing Then Return

For i As Integer = 0 To img.Width - 1
For j As Integer = 0 To img.Height - 1
If GetColorAverage(img.GetPixel(i, j)) < THRESHOLD Then
img.SetPixel(i, j, Color.Black)
Else
img.SetPixel(i, j, Color.White)
End If
Next
Next
PictureBox1.Refresh()
End Sub

'色の平均
Private Function GetColorAverage(ByVal c As Color) As Integer
Return Int(CDbl(c.R) * 0.299 + CDbl(c.G) * 0.587 + CDbl(c.B) * 0.114)
End Function

ちなみにFor文の中(IF〜ENDIF)を次の2行に入れ替えるとグレースケールになります。
Dim iAve As Integer = GetColorAverage(img.GetPixel(i, j))
img.SetPixel(i, j, Color.FromArgb(iAve, iAve, iAve))

がんばってください。


0
引用返信 編集キー/
■7949 / inTopicNo.17)  Re[13]: RGB値
□投稿者/ カラー 二等兵(6回)-(2006/10/31(Tue) 14:15:45)

分類:[VB.NET] 

「ゆめ」って打ってしまったのは多分ほかに何かしていたか電話してて「ゆめ」という単語がでてしまいなぜが頭に入って打ってしまったと思います。すいません。


エラーがでたらまずヘルプで確認し、ブレイクポイントできちんと値を確認していきたいと思います!そういった基礎からもう一度やっていきたいと思います。

>まきなすさん
ありがとうございます!
ひとつ質問なのですが
Public Function GetColorAverage(ByVal color As Color)
Return Int(CDbl(color.R) * 0.299 + CDbl(color.G) * 0.587 + CDbl(color.B) * 0.114)
End Function

のコードの0.299ば¥などの数字は一体なんなんですか?ばかみたいな質問ですみません。

0
引用返信 編集キー/
■7952 / inTopicNo.18)  Re[14]: RGB値
□投稿者/ まきなす 二等兵(7回)-(2006/10/31(Tue) 16:19:42)

分類:[VB.NET] 

0.299などの値はフルカラーをグレースケールに変換するための定数です。
グレースケールへの変換は赤、緑、青の成分に重み付けをする必要があります。
単純に色値合計の平均をとってもいいのですがあまり良い結果は得られないようです。
よく利用されるのがYIQ色系への変換です。
このうちYが輝度を表し
Y=R×0.299+G×0.587+B×0.114
で求められます。
グレースケール変換ではこのYを使用します。
たぶん2値化でもこのほうが適しているのではないかと思います。
画像処理は専門分野ではないため詳しいことは知りません。
YIQ変換をするときの公式だと思って使用しています。
詳しいことは画像処理そのものを勉強してください。

これは余談ですが画像をピクセル処理する場合は例のようなやり方をすると
画像が大きい場合にスピードが問題になることがあります。
例の方法はかなり遅いです。
スピードを何倍も上げる方法がいろいろ存在します。
調べて挑戦してみてください。

それから、問題がもし解決したなら解決にチェックしてください。

0
引用返信 編集キー/
■7953 / inTopicNo.19)  Re[15]: RGB値
□投稿者/ Blue 少尉(123回)-(2006/10/31(Tue) 16:34:17)

分類:[VB.NET] 

>GetColorAverage
という関数名は間際らしいかと思います。
((x + y + z)/ 3 の展開系かとおもったしw)

0
引用返信 編集キー/
■7955 / inTopicNo.20)  Re[16]: RGB値
 
□投稿者/ まきなす 二等兵(8回)-(2006/10/31(Tue) 17:31:27)

分類:[VB.NET] 

すみません。
カラーさんがわかりやすいかなと思って用いられていた関数名をそのまま使ってしまいました。
はじめは内容が(x + y + z)/ 3の旨の事を書いていたんですが、
もし2値化が目的ならこのほうがいいかなと勝手に内容を変更してしまいました。
GetLuminance()
などに変えておけば良かったですね。


0
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -