BMP画像の特定座標のRGBの求め方について

解決


Jet  2006-03-29 08:55:24  No: 130827

初めまして,Jetと申します.

現在,画像認識についてのプログラムを作成中ですが
思うように作ることができません.
まず,PictureBoxに画像(BMP)を読み込み,読み込んだ画像の座標を指定し
1画素のRGBを求める方法(例:BMP画像の座標(39,103)のRGB)
をご存知の方がいらっしゃいましたらご教授下さい.

環境:WinXP,VB6


  2006-03-29 09:46:11  No: 130828

Pointメソッドとか


ガッ  2006-03-29 17:55:12  No: 130829

またはDIBについて調べてみるとか…
(GDI経由だと死ぬほど遅いかと)


Jet  2006-03-29 20:14:23  No: 130830

和様のおしゃった通りに作ってみると以下のような感じになりました.

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の求め方かな・・・.
もう少しがんばってみます.
何か助言等がございましたらご教授下さい.


ガッ  2006-03-29 20:26:35  No: 130831

※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


Jet  2006-03-29 22:44:03  No: 130832

プログラムの一部ですが,指定した座標を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

ガッ様のプログラムも実験してみたいと思います!
わざわざご丁寧にありがとうございました.

また何かあればその時は宜しくお願い致します.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加