初めまして,Jetと申します.
現在,画像認識についてのプログラムを作成中ですが
思うように作ることができません.
まず,PictureBoxに画像(BMP)を読み込み,読み込んだ画像の座標を指定し
1画素のRGBを求める方法(例:BMP画像の座標(39,103)のRGB)
をご存知の方がいらっしゃいましたらご教授下さい.
環境:WinXP,VB6
Pointメソッドとか
またはDIBについて調べてみるとか…
(GDI経由だと死ぬほど遅いかと)
和様のおしゃった通りに作ってみると以下のような感じになりました.
Private Sub Command2_Click()
Dim c, r, g, b As Long
Dim nx As Single
Dim ny As Single
nx = 100
ny = 100
c = Picture1.Point(nx, ny)
End Sub
これで,Picture1の座標(100,100)が指定できたと思います.
和様ありがとうございました.
ガッ様のDIBについて軽く調べてみましたけど,ちょっと複雑そうですね^^;
助言ありがとうございました.
後は,RGBの求め方かな・・・.
もう少しがんばってみます.
何か助言等がございましたらご教授下さい.
※PointメソッドはGDI経由よりさらに遅い(と思う)です
が、簡単なのでそれで十分と感じるならばDIBも使わなくてもいいかもしれません。
> RGBの求め方かな
たとえば…
'colorは&hAABBGGRRなLong型
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Type tRGBColor
r As Byte
g As Byte
b As Byte
a As Byte
End Type
Private Function ColorToRGB_A(ByVal color As Long) As tRGBColor
With ColorToRGB_A
.a = 0 '使わないことにする
.r = color And &HFF&
.g = (color And &HFF00&) \ &H100&
.b = (color And &HFF0000) \ &H10000
End With
End Function
Private Function ColorToRGB_B(ByVal color As Long) As tRGBColor
CopyMemory ColorToRGB_B, color, 4
End Function
Private Sub Form_Load()
Dim argb As tRGBColor
argb = ColorToRGB_A(RGB(16, 0, 5))
Debug.Print argb.r, argb.g, argb.b
argb = ColorToRGB_B(RGB(16, 0, 5))
Debug.Print argb.r, argb.g, argb.b
Debug.Print Hex(rgb(16, 0, 5))
End Sub
プログラムの一部ですが,指定した座標をRGBごとに分解する事ができました.後は 少し加えればできそうです.
Private Sub Command1_Click()
Dim c, r, g, b As Long
Dim nx As Single
Dim ny As Single
'座標
nx = 100
ny = 100
c = Picture1.Point(nx, ny)
'RGB分解
r = (c And &HFF)
g = (c And &HFF00&) \ &H100
b = (c And &HFF0000) \ &H10000
End Sub
ガッ様のプログラムも実験してみたいと思います!
わざわざご丁寧にありがとうございました.
また何かあればその時は宜しくお願い致します.
ツイート | ![]() |