お世話になります
よろしくお願いします
Pictureboxをクリックされたときに
そのPictureboxがクリックされた箇所の色を16進数で取得したいのですが
うまくいきません
どこが間違っているのか教えてもらえないでしょうか?
ソースは
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Private Sub Picture1_Click()
Dim Poi As POINTAPI
Dim iro As Long
GetCursorPos Poi
iro = GetPixel(Me.Picture1.hdc, Poi.x, Poi.y)
Me.Label2.Caption = Poi.x
Me.Label3.Caption = Poi.y
Me.Label1.Caption = iro
CloseHandle (Me.Picture1.hdc)
End Sub
GetPixcelの引数に-1しか入りません
あと、もし数値で取れたとして
それを16進数にする方法を教えてください
よろしくお願いします
No.2ベストアンサー
- 回答日時:
VBのバージョンは何でしょう?
VB6で有るなら PictureBoxのPointプロパティである座標の色データを取得可能です
MouseDownイベントで
dim cl as long
cl = Picture1.Point( x, y )
Debug.Print Right("00000000" & Hex( cl ), 8 )
といった具合で可能ですよ
WinAPIは必要ありません
VB.NETですとBitmapオブジェクトを取得してGetPixelメソッドでColorオブジェクトを取得 toStringで16進文字列に変換といった手法でしょう
No.1
- 回答日時:
少し調べてみましたが、GetCursorPosで得られる座標は
「Screen上の」絶対座標のようです。
それに比して、GetPixelで渡しているデバイスコンテキストのハンドルは
Screenではなくて、PictureBoxのものなので、座標として本来は
「PictureBoxの左上を起点とした座標」を与える必要があるはずです。
Formの位置とPictureBoxの位置、それとGetCursorPosで得た座標から
マウスカーソルの「PictureBox内での座標」を計算して、与えてみてください。
私の方では計算してまでは 確認してませんが、たぶん いけるんじゃないかな?
また、16進数への変換はHex関数で可能です。
なお、気になったのですが、PictureBoxのhDCの管理はVB任せでいいと思いますので
CloseHandleは要らないのではないでしょうか?
(私は問答無用で削除して少し動かしてみましたが、少なくとも異常終了とかは
しません。むしろCloseHandleしてしまった際の動きが気になります)
この回答への補足
ありがとうございます
PictureboxのMouse_MoveでXとYを取得すると
「PictureBox内での座標」が取得できるかと思って
そっちでやってみましたが
取れるところと取らないところがあります。
いちお、左上が0,0になるのでPictureboxないの座標はとれていると思うのですが
白っぽいところだととれるのですが、ほかの色がとれません
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim iro As Long
GetCursorPos Poi
iro = GetPixel(Me.Picture1.hdc, X, Y)
Me.Label2.Caption = X
Me.Label3.Caption = Y
Me.Label1.Caption = iro
End Sub
何か間違っているのでしょうか?
以上よろしくお願いします
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Vba Userformを前面に出すについて 3 2022/04/15 12:29
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
C言語において、0の座標をキャ...
-
マインクラフト(pc版)で座標...
-
MATLABの射影変換についての質...
-
座標を持った平面範囲に座標を...
-
3次元空間上の2つの座標から...
-
以下のプログラムは重心を求め...
-
交差する2線分の交点座標の求め方
-
プログラミングの問題について...
-
指定した範囲の反転について
-
円弧の描画について
-
VB6のPrinter.ScaleWidth に対...
-
黒体放射軌跡のxy色度座標への...
-
空間上の四面体の体積
-
y=x^2の座標をプロットするプロ...
-
閉図形の座標の配列が右回りか...
-
c言語でキーボードから2点の座...
-
球面状に円を描くプログラム
-
多角形の内部かどうか判定する方法
-
直線上にある点の座標の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
グラフの交点の求め方(Excel)
-
マインクラフト(pc版)で座標...
-
エクセルである点からの距離で...
-
エクセルで回転する座標の出し方
-
3次元空間上の2つの座標から...
-
始点、終点の二つの座標と半径...
-
c言語でキーボードから2点の座...
-
閉図形の座標の配列が右回りか...
-
以下のプログラムは重心を求め...
-
y=x^2の座標をプロットするプロ...
-
交差する2線分の交点座標の求め方
-
ダイアログ内コントロールの位...
-
シーケンサー(PLC?)で制...
-
ガウシアンフィルタのCプログラム
-
多角形の内部かどうか判定する方法
-
エクセルシート上のマウスポイ...
-
直線上にある点の座標の求め方
-
OpenCvSharp4による画像判定解...
-
C言語 配列で座標
-
ピクチャボックスの座標取得
おすすめ情報