【最大10000ポイント】当たる!!質問投稿キャンペーン!

初めて書き込みます。
現在VB.NETと画像処理を勉強中です。
最終的には、画像を取り込んで画像の被写体の縦と横の長さをVB.NETから求めるのが目的です。
現在画像の色情報から輝度を求め、その画素数をカウントしてヒストグラムを求めるところまでは、おぼろげながら理解できています。しかし、画素数をカウントし縦と横の長さを求めるプログラムの作り方がわかりません。
解る方がいましたらぜひおしえてください。

※画像処理についてですが、プログラムが関わっているので書き込みました。カテゴリーが違っていたらすいません。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

Dim BMP as Bitmap


Dim g_width as integer'横画素数
dim g_height as integer'縦画素数

BMP=New Bitmap(picturebox1.image)
'Picturebox1の画素数を読み取るとする

g_width=BMP.width
g_height=BMP.height

でどうでしょうか?
おそらく、picturebox1のSizeModeをZoomにしていても、
ちゃんと、正ファイルのサイズを読み込んでくれると思うんですが…
    • good
    • 0
この回答へのお礼

返答が遅れ申し訳ありません。
ありがとうございます。
なるほど、そのようにすればファイルサイズを読み込むのですね
チャレンジしてみたいとおもいます。

お礼日時:2007/08/22 18:40

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QBitmap.GetPixelより高速なもの

いまVBでBitmap.GetPixelを使って、グレースケールの画像のRGBを取得しています。
まあグレースケールなんでRGB同じなのでとりあえずRの値を使うとして、
200*300の画像をFor文でBitmap.GetPixelを使うととてもじゃないぐらい遅いです。
ある程度調べると、LockBits()というものが見つかったのですが使い方がわかりません。 教えてください。

Aベストアンサー

補足されたコードをもう一度見直したほうがいいように思います

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

といった具合で 速度がずいぶん改善されるように思います

補足されたコードをもう一度見直したほうがいいように思います

for LY ...
 for LX ...
  myBitmapの構築
  色情報の取得
  if 色判定 then
   Graphicsオブジェクトの生成
   描画
  end if
 next ' LX
next ' LY
といった構成になっています

2重ループの内側で myBitmapを毎回作成するのは無駄です
Graphicsオブジェクトの生成もループの内側でやった場合
連続して判定がTrueを返した場合毎回生成しなおします

変化しないものはループの外へ追い出して見ましょう

' Cre...続きを読む

Qフルパスから最後のディレクトリ名を取得したい。

vb.netなのですが、例えば
c:\aaa\bbb\ccc\ddd\eee\fff.exe
というフルパスがあったとして、
eeeというディレクトリ名を取得したいのですが、
何か良い方法はないでしょうか。
それぞれのディレクトリ名の文字数や階層数は
決まっていないのですが、オススメの方法が
ありましたら、教えて頂けると助かります。

Aベストアンサー

MessageBox.Show(IO.Path.GetFileName(IO.Path.GetDirectoryName(myPath)))

IO.Path の GetDirectoryName でフォルダのフルパスを取得して、さらに IO.Path の GetFileName で最終フォルダ(またはファイル)の名前を取得。

QColorをRGBで指定する方法

C#ですが、VB関数も使えるので、大丈夫だと
思いますが、質問です。

panel1.BackColor=色

この色の部分を、ループ中で、
グラデーションで、色を変えていこうと
思っています。
そのため、何とか、色を数値で
指定したいのですが、
この方法が、分かりません。
(panel1.BackColor=rgb(r,g,b)とか
指定ができれば、いいと思っています)。

何か分かる人がいましたら、
よろしくお願いします。

Aベストアンサー

これではだめでしたか?

Color myColor = Color.FromArgb(red, green, blue);
.NETのカラーは、アルファチャネル値がありますので、正確には
Color myColor = Color.FromArgb(int alpha, int red, int green, int blue);
です。


人気Q&Aランキング