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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
VBA内でのGetPixelを使用した時のRGB値取得の方法
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスVBAのMe!と[ ]
-
VBA エンターキーでイベントに...
-
【エクセルのマクロ】クリップ...
-
日本語の文字化けを直す方法
-
Excelを閉じるときVBAプロジェ...
-
Excel VBA でPictureBoxオブジ...
-
VBAのRange()ってオブジェクト...
-
エクセルのデータをwebフォーム...
-
Excel2007 でのチェックボック...
-
コードでオブジェクトを最前面に
-
VBからCrystalReportsへSQL文を...
-
Imageコントロールにグラフを表...
-
認識するイベントの範囲を制限...
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
findは動くがfindnextがマクロ...
-
月度は何て読みますか?
-
メルカリのメルカードで買い物...
-
エクセルVBAで、MsgBox やInput...
-
CloseとDisposeの違い
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA エンターキーでイベントに...
-
アクセスVBAのMe!と[ ]
-
【エクセルのマクロ】クリップ...
-
Accessのフォーム上にエクセル...
-
Excel VBAでマウスの左クリック...
-
文字列で小数点以下の0を削除し...
-
現在アクティブになっているオ...
-
日本語の文字化けを直す方法
-
エクセルVBAでセル番地を指定し...
-
【エクセル】複数のTextBoxに共...
-
ユーザーフォームのインポート...
-
VBAでフォームのコントロールの...
-
コードでオブジェクトを最前面に
-
ExcelのシートをAccessで表示し...
-
Access からオブジェクトとして...
-
PowerpointVBAで指定のShapeオ...
-
「SHDocVw」の意味
-
Excel2007 でのチェックボック...
-
サブルーチンにオブジェクト名...
-
txtNo,txtDate等の意味
おすすめ情報