こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB2005での画像処理

各ピクセルの色情報を取得し,そのままコピーするプログラムです.
同じ大きさのPictureBox1とPictureBox2,それとButton1があります.
エラーや警告は出ませんが,Button1をクリックしてもまったく動きません.
最終的にはPictureBox1を画像処理してPictureBox2に結果を表示させたいのですが,そのままコピーも出来ないため原因を探しています.
A = picture1.GetPixel(i, j).ToArgb()
picture2.SetPixel(i, j, color.FromArgb(A))
ではだめなのでしょうか.ご教授ください.

-----以下プログラム------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
Dim j As Integer
Dim A As Integer
Dim picture1 As New Bitmap(PictureBox1.Image)
Dim picture2 As New Bitmap(PictureBox2.Image)

For j = 0 To PictureBox1.Width - 1
For i = 0 To PictureBox1.Height - 1
A = picture1.GetPixel(i, j).ToArgb()
picture2.SetPixel(i, j, color.FromArgb(A))
Next
Next
End Sub

投稿日時 - 2009-06-02 19:35:15

QNo.5011506

困ってます

質問者が選んだベストアンサー

すでに#1 edp3142さんが問題点を指摘されているので横槍気味で恐縮です。
惜しいところまでコーディングできていたので・・・。

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim i As Integer
Dim j As Integer
Dim A As Integer
Dim picture1 As New Bitmap(PictureBox1.Image)
Dim picture2 As New Bitmap(picture1.Width, picture1.Height, Imaging.PixelFormat.Format24bppRgb)

  For i = 0 To picture1.Width - 1
    For j = 0 To picture1.Height - 1
      A = picture1.GetPixel(i, j).ToArgb()
      picture2.SetPixel(i, j, Color.FromArgb(A))
    Next
  Next

PictureBox2.Image = picture2
End Sub

Forループのiとjが逆っぽかったので入れ替えました。

ちなみにGetPixelとSetPixelは非常に動作が遅いので大きな画像を1ピクセル単位で処理する場合にはえらく時間がかかります。
この先の高速化をお考えであれば、BitmapクラスのLockBits/UnlockBitsメソッドについて調べてみてください。

投稿日時 - 2009-06-03 00:47:44

補足

追加で質問なのですが,
画像を暗くするためにA=Amax*(A/Amax)^2の式を使ったのですが,
赤っぽいノイズが入ってしまいます.
GetPixelの戻り値をそのまま使ってはダメなのでしょうか.

投稿日時 - 2009-06-04 19:38:21

お礼

丁寧にご教授くださりありがとうございます.
おかげさまでコピーのところまで出来ました.
iとj逆でした.ご指摘ありがとうございます.

投稿日時 - 2009-06-04 19:38:07

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Bitmapを(PictureBoxの画像を元に)新規作成し、Bitmapに対して書き込んでいるだけですので、画面に変化がなくて当然ですね。
処理結果をPictureBoxに再設定しなくては。。。

picture2 を SaveAs メソッドでファイルに保存し、それをエクスプローラで開いてみれば、処理できているかわかるのではないでしょうか。

投稿日時 - 2009-06-02 23:10:43

お礼

ありがとうございました.
おかげさまで画像のコピーできました.

投稿日時 - 2009-06-04 19:35:39

あなたにオススメの質問