DOBON.NET DOBON.NETプログラミング掲示板過去ログ

GetPixel について

  • 題名: GetPixel について
  • 著者: ふろふろ
  • 日時: 2004/05/22 0:20:55
  • ID: 4132
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[XP ]
分類:[.NET]

GetPixelの使い方で教えてください。
ピクチュアーBOXにjpg画像を読み込んで、下記のような方法で各XY座標のRGBの値を
調べているのですが、PCを変えたり、同じPCで拡張子が同じjpgでも、画像によってこの命令が通るものと、エラーになるものがあり不安定なのですが、何か条件みたいなものがあるのでしょうか?

col = bmp.GetPixel(i, j) '---------------> ピクセルの色を取得

よろしく、ご教授おねがいします。
■No4132に返信(ふろふろさんの記事)
> GetPixelの使い方で教えてください。
> ピクチュアーBOXにjpg画像を読み込んで、下記のような方法で各XY座標のRGBの値を
> 調べているのですが、PCを変えたり、同じPCで拡張子が同じjpgでも、画像によってこの命令が通るものと、エラーになるものがあり不安定なのですが、何か条件みたいなものがあるのでしょうか?
>
> col = bmp.GetPixel(i, j) '---------------> ピクセルの色を取得

どのようなエラーが出るのでしょうか?また、i,jがbmpのWidth,Heihtより小さいことは確かでしょうか?(このようなことをお聞きするのも失礼かとは思いますが...)
■No4142に返信(管理人さんの記事)
> ■No4132に返信(ふろふろさんの記事)
>>GetPixelの使い方で教えてください。
>>ピクチュアーBOXにjpg画像を読み込んで、下記のような方法で各XY座標のRGBの値を
>>調べているのですが、PCを変えたり、同じPCで拡張子が同じjpgでも、画像によってこの命令が通るものと、エラーになるものがあり不安定なのですが、何か条件みたいなものがあるのでしょうか?
>>
>>col = bmp.GetPixel(i, j) '---------------> ピクセルの色を取得
>
> どのようなエラーが出るのでしょうか?また、i,jがbmpのWidth,Heihtより小さいことは確かでしょうか?(このようなことをお聞きするのも失礼かとは思いますが...)

管理人様へ
エラーは
System.ArgumentException' のハンドルされていない例外が system.drawing.dll で発生しました。
追加情報 : 使用されたパラメータが無効です。
です。
Width,Heihtはもちろん-1をしてありますが、管理人様の助言に思い当たるるところがありまして、ピクチュアーBOXのサイズを260x120picにしたところ解決しました、ピクチュアーBOXのサイズを320x240に設定し元画像は260x120picしかないのにプロパティの設定で拡大表示モードにしていたのが原因のようです、ちょっとしたヒントで解決の糸口がつかめましたこと感謝いたします。
しかしながら、別のPCで全く同じプログラムでエラーが起きないのがまだ理解できず、この点原因をつかんでないとまたどこかでトラブリそうです。
ひょっとして、モニタの解像度設定の差でもあるのでしょうか?
明日会社のPCで再度確認しておきます。
ありがとうございました。
  • 題名: Re[3]: GetPixel について
  • 著者: ふろふろ
  • 日時: 2004/05/26 0:11:58
  • ID: 4162
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No4157に返信(ふろふろさんの記事)
> ■No4142に返信(管理人さんの記事)
>>■No4132に返信(ふろふろさんの記事)
> >>GetPixelの使い方で教えてください。
> >>ピクチュアーBOXにjpg画像を読み込んで、下記のような方法で各XY座標のRGBの値を
> >>調べているのですが、PCを変えたり、同じPCで拡張子が同じjpgでも、画像によってこの命令が通るものと、エラーになるものがあり不安定なのですが、何か条件みたいなものがあるのでしょうか?
> >>
> >>col = bmp.GetPixel(i, j) '---------------> ピクセルの色を取得
>>
>>どのようなエラーが出るのでしょうか?また、i,jがbmpのWidth,Heihtより小さいことは確かでしょうか?(このようなことをお聞きするのも失礼かとは思いますが...)
>
> 管理人様へ
> エラーは
> System.ArgumentException' のハンドルされていない例外が system.drawing.dll で発生しました。
> 追加情報 : 使用されたパラメータが無効です。
> です。
> Width,Heihtはもちろん-1をしてありますが、管理人様の助言に思い当たるるところがありまして、ピクチュアーBOXのサイズを260x120picにしたところ解決しました、ピクチュアーBOXのサイズを320x240に設定し元画像は260x120picしかないのにプロパティの設定で拡大表示モードにしていたのが原因のようです、ちょっとしたヒントで解決の糸口がつかめましたこと感謝いたします。
> しかしながら、別のPCで全く同じプログラムでエラーが起きないのがまだ理解できず、この点原因をつかんでないとまたどこかでトラブリそうです。
> ひょっとして、モニタの解像度設定の差でもあるのでしょうか?
> 明日会社のPCで再度確認しておきます。
> ありがとうございました。
>
> 本日会社のPCで確認しましたが、解像度は関係ないようです。
原因不明ですが、取り合えず解決しましたので次に進みます。
ありがとうございました。
> Width,Heihtはもちろん-1をしてありますが、管理人様の助言に思い当たるるところがありまして、ピクチュアーBOXのサイズを260x120picにしたところ解決しました、

もしかしたら、i,jの大きさがピクチャボックスのWidth,Heihtより小さいとしていませんか?もしそうであれば、イメージのWidth,Heihtと比べるべきです。
■No4164に返信(管理人さんの記事)
>>Width,Heihtはもちろん-1をしてありますが、管理人様の助言に思い当たるるところがありまして、ピクチュアーBOXのサイズを260x120picにしたところ解決しました、
>
> もしかしたら、i,jの大きさがピクチャボックスのWidth,Heihtより小さいとしていませんか?もしそうであれば、イメージのWidth,Heihtと比べるべきです。

管理人様へ



'ビットマップを取得

Dim bmp As Bitmap '対象ビットマップ
Dim bmpDest As Bitmap '処理後ビットマップ
Dim i As Integer '横方向
Dim j As Integer '縦方向
Dim col As Color 'ピクセルの色

Dim colR As Integer 'Rピクセルの色合計
Dim colG As Integer 'Gピクセルの色合計
Dim colB As Integer 'Bピクセルの色合計

bmp = New Bitmap(PictureBox1.Image)
bmpDest = New Bitmap(PictureBox1.Width, PictureBox1.Height)

For i = 0 To PictureBox1.Width - 1
For j = 0 To PictureBox1.Height - 1
col = bmp.GetPixel(i, j) '----> ピクセルの色を取得

colR = colR + col.R
colG = colG + col.G
colB = colB + col.B

Next j

Next i

TextBox1.Text = colR
TextBox2.Text = colG
TextBox3.Text = colB
こんなロジックでPictureBox1のサイズは自動取得しています。
どこか、ロジックの間違いでもあるのでしょうか?

 PictureBox1のサイズを、実際の画像サイズと合わせておかないと
PCによってbmp.GetPixel(i, j) のところで上記のようなエラーがでます。
どうして、PCによってそのような差がでるのか分からないのです。
  • 題名: Re[5]: GetPixel について
  • 著者: ふろふろ
  • 日時: 2004/05/26 21:13:01
  • ID: 4183
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No4170に返信(ふろふろさんの記事)
> ■No4164に返信(管理人さんの記事)
> >>Width,Heihtはもちろん-1をしてありますが、管理人様の助言に思い当たるるところがありまして、ピクチュアーBOXのサイズを260x120picにしたところ解決しました、
>>
>>もしかしたら、i,jの大きさがピクチャボックスのWidth,Heihtより小さいとしていませんか?もしそうであれば、イメージのWidth,Heihtと比べるべきです。
>
> 管理人様へ
>
>
>
> 'ビットマップを取得
>
> Dim bmp As Bitmap '対象ビットマップ
> Dim bmpDest As Bitmap '処理後ビットマップ
> Dim i As Integer '横方向
> Dim j As Integer '縦方向
> Dim col As Color 'ピクセルの色
>
> Dim colR As Integer 'Rピクセルの色合計
> Dim colG As Integer 'Gピクセルの色合計
> Dim colB As Integer 'Bピクセルの色合計
>
> bmp = New Bitmap(PictureBox1.Image)
> bmpDest = New Bitmap(PictureBox1.Width, PictureBox1.Height)
>
> For i = 0 To PictureBox1.Width - 1
> For j = 0 To PictureBox1.Height - 1
> col = bmp.GetPixel(i, j) '----> ピクセルの色を取得
>
> colR = colR + col.R
> colG = colG + col.G
> colB = colB + col.B
>
> Next j
>
> Next i
>
> TextBox1.Text = colR
> TextBox2.Text = colG
> TextBox3.Text = colB
> こんなロジックでPictureBox1のサイズは自動取得しています。
> どこか、ロジックの間違いでもあるのでしょうか?
>
>  PictureBox1のサイズを、実際の画像サイズと合わせておかないと
> PCによってbmp.GetPixel(i, j) のところで上記のようなエラーがでます。
> どうして、PCによってそのような差がでるのか分からないのです。
>
あ、そう言うことですか。
For i = 0 To bmp.Width - 1 → For i = 0 To bmp.Width - 1
これでPictureBox1のサイズを変えてもエラーが出なくなりました。
 これでイメージに対して-1の設定になっているのでしょうか。
動作としては正常です。

DOBON.NET | プログラミング道 | プログラミング掲示板