No.3ベストアンサー
- 回答日時:
補足されたコードをもう一度見直したほうがいいように思います
for LY ...
for LX ...
myBitmapの構築
色情報の取得
if 色判定 then
Graphicsオブジェクトの生成
描画
end if
next ' LX
next ' LY
といった構成になっています
2重ループの内側で myBitmapを毎回作成するのは無駄です
Graphicsオブジェクトの生成もループの内側でやった場合
連続して判定がTrueを返した場合毎回生成しなおします
変化しないものはループの外へ追い出して見ましょう
' Create a Bitmap object from an image file.
Dim myBitmap As New Bitmap(".\Test01.jpg")
Dim P As Graphics = PictureBox2.CreateGraphics
Dim LY As Long
' イメージ全体で行うなら 299をmyBitmap.Heightに
' 199を myBuitmp.Widthに変更したほうがいいでしょう
' 1行おきの処理なら Stepで調整する
For LY = 0 To 299 Step 2
Dim LX As Long
For LX = 0 To 199
Try
' Get the color of a pixel within myBitmap.
Dim pixelColor As Color = myBitmap.GetPixel(LX, LY)
Red = pixelColor.R
Label1.Text = "R" + Red
If (Red > 40) Then
P.FillRectangle(Brushes.White, LX, LY, 1, 1)
End If
Catch ex As Exception
End Try
Next
' 1行おきの処理をしたいのであれば For文にStepをつけましょう
' Forなど自動でカウントアップ(またはダウン)するものを
' コード内でいじってしまうのはあまり行儀がよくありません
' LY = LY + 1
Next
といった具合で 速度がずいぶん改善されるように思います
ありがとうございました。 これを参考にしていただいたら12秒ほどでできるようになり、その後さらに改良し、今は3秒ほどでできるようになりました。
本当にありがとうございました
No.2
- 回答日時:
VB.NET付属のMSDN(またはWebサイト)で LockBitsメソッドについて調べてみたのでしょうか?
簡単なサンプルも記載されていますよ
http://msdn.microsoft.com/ja-jp/library/5ey6h79d …
ここのサンプルは BitmapオブジェクトにJpgイメージを読み込み
読み込んだBitmapのLockBitsメソッドでBmpData型のオブジェクトを取得します
取得したBmpDataのStrideプロパティがその画像の横幅に必要なバイト数でこれにBitmapの高さを乗算してイメージを表すのに必要なByte配列を作成します
作成した配列に 元のイメージデータをコピー
コピーされたデータの3番目の要素から3個おきにデータを255に設定
24ビット構成ならば赤(R)のデータのみ255にします
加工が終わったら元のイメージデータを書き換えます
書き換えが終了したら UnlockBitsでロックを解除
書き換えたイメージを描画
といった流れになっています
参考URL:http://msdn.microsoft.com/ja-jp/library/5ey6h79d …
No.1
- 回答日時:
windows API のgetpixel というのでやってみました。
速いのか遅いのかわかりませんが、
for nextのループによる約50万点の取得で3秒くらいでした。
古いノートPC でCPUはceleron M(2Ghz)です。
この回答への補足
自慢ではないのですが私のPCの方が処理速度は速いみたいなのですが、
もっと時間がかかりました。20分くらい。
画像のサイズは200*300です。
こんな感じです。
Dim LY As Long
For LY = 0 To 299
Dim LX As Long
For LX = 0 To 199
Try
' Create a Bitmap object from an image file.
Dim myBitmap As New Bitmap(".\Test01.jpg")
' Get the color of a pixel within myBitmap.
Dim pixelColor As Color = myBitmap.GetPixel(LX, LY)
Red = pixelColor.R
Label1.Text = "R" + Red
If (Red > 40) Then
Dim P As Graphics = PictureBox2.CreateGraphics
P.FillRectangle(Brushes.White, LX, LY, 1, 1)
End If
Catch ex As Exception
End Try
Next
LY = LY + 1
Next
こんな感じで画像のRの値が40以上の点をPicturebox2の点に打っているのですがとても時間がかかります。どんなソースなのかくわしく教えてください。 お願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語の質問です。バイナリ形式で保存されたWindows Bitmap形式の画像ファイルを読み込み、 3 2023/07/19 14:58
- Illustrator(イラストレーター) Adobeのイラレでグラデーション機能を使ってイラストを書いたところ、スマホやiPadで同じファイル 1 2023/07/24 18:52
- Photoshop(フォトショップ) インデザイン 上で、フォトショップの線の色を変えたい 4 2022/06/12 18:49
- Photoshop(フォトショップ) Photoshopの画像が重すぎるので軽くしたいです 7 2022/05/13 20:13
- Photoshop(フォトショップ) MacでPhotoshopに使い方 教えて! 2 2023/07/08 08:24
- その他(ソフトウェア) IndesignのGPUは色?CMYKなの?RGBなの? 1 2022/05/09 19:13
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- C言語・C++・C# 画像の画素値を変えるC言語のプログラムで指定された画像の中に白い三角形を右上に表示させるにはどのよう 3 2022/10/30 01:16
- フリーソフト GIMPの使い方 1 2022/07/11 13:52
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
WebBrowser内のフォームをsubmi...
-
【エクセル】複数のTextBoxに共...
-
Doevents をご教授ください。
-
アクセスのテーブルを隠す?
-
日本語の文字化けを直す方法
-
txtNo,txtDate等の意味
-
<OBJECT>タグからJavascript呼...
-
ラベルの文字列を読み上げたい
-
SelectObjectの戻り値
-
pythonのメゾッドの整合性について
-
アクセスのスクロールバー
-
PowerpointVBAを使って、特定文...
-
エクセルVBAでセル番地を指定し...
-
Excel VBAでマウスの左クリック...
-
「ご処理進めて頂きますようお...
-
EXCEL VBA マクロ 実行する度に...
-
スマホでサイトの画像を長押し→...
-
フォーム上の全てのコントロー...
-
【Excel】特定の文字を含むセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
【エクセルのマクロ】クリップ...
-
エクセルVBAでセル番地を指定し...
-
Excel2007 でのチェックボック...
-
Accessのフォーム上にエクセル...
-
日本語の文字化けを直す方法
-
エクセルのデータをwebフォーム...
-
現在アクティブになっているオ...
-
PowerpointVBAで指定のShapeオ...
-
コードでオブジェクトを最前面に
-
【エクセル】複数のTextBoxに共...
-
Imageコントロールにグラフを表...
-
ユーザーフォームのインポート...
-
Access からオブジェクトとして...
-
構造体の静的な初期化
-
Excel VBA でPictureBoxオブジ...
-
「SHDocVw」の意味
おすすめ情報