[リストへもどる]
一括表示

投稿時間:2003/03/05(Wed) 19:32
投稿者名:アイジー
Eメール:
URL :
タイトル:
VB Point(X,Y)について
はじめまして、VBの初心者なので どうぞ教えてください。
ピクチャーBOX上へLine関数で線を書いた後、その線上の位置をPoint(X,Y)で色情報を取得しています。
その時、Lineを書いていない場所の色は白(ピクチャーBOXのbackcolorは白に設定)なんですが、
場所によっては取得した色情報が白ではない色が入ってくるのです。&HCOCOCO&など...
Lineを書く前はPicture.clsで一度リセットしているんですが...
どうぞ宜しくお願いします。

投稿時間:2003/03/05(Wed) 21:53
投稿者名:よねKEN
Eメール:
URL :http://www5b.biglobe.ne.jp/~yone-ken/
タイトル:
Re: VB Point(X,Y)について
> ピクチャーBOX上へLine関数で線を書いた後、その線上の位置をPoint(X,Y)で色情報を取得しています。
> その時、Lineを書いていない場所の色は白(ピクチャーBOXのbackcolorは白に設定)なんですが、
> 場所によっては取得した色情報が白ではない色が入ってくるのです。&HCOCOCO&など...

C0C0C0というとWindowsの標準設定のときのウィンドウの灰色ですね。
座標が何か間違っている可能性が高いと思います。
下記の点を確認して下さい。

1)PointメソッドはFormではなくきちんとそのPictureBoxのPointメソッドを使っていますか?
  ○ Picture1.Point(x, y)
  X Point(x, y) や Me.Point(x, y) や Form1.Point(x, y)
2)PictureBoxのScaleModeは3-ピクセルになっていますか?
3)ScaleModeが3-ピクセルだとして、x座標は0〜PictureBoxのScaleWidth-1の範囲、
y座標は0〜PictureBoxのScaleHeight-1の範囲に入っていますか?

投稿時間:2003/03/05(Wed) 23:11
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re: VB Point(X,Y)について
またまた、トチリました。<m(__)m>
紛らわしいので削除させて頂きます。
ご迷惑をおかけしました。

投稿時間:2003/03/06(Thu) 00:43
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^2: VB Point(X,Y)について
> 1.ピクチャーの縦横のサイズが同じだとPicture1.Point(x, y)でも取得できます。

>     For i = 0 To .ScaleHeight - 1
>         For j = 0 To .ScaleWidth - 1

 ScaleHeight と ScaleWidth が逆になっています。

> 2.APIを使用すればピクセル単位になりますで取得できます。

>         .ScaleMode = vbPixels
>         .ScaleHeight = 120
>         .ScaleWidth = 160

 ScaleHeight や ScaleWidthを変更しても、ピクチャボックスのサイズは変わりません。
ScaleModeが、0-ユーザーになって、座標系が変わるだけです。ScaleModeがピクセル
じゃないので正常に動作しません。

 以下のコードでうまく行くと思います。

Option Explicit

'ピクセルカラー値を取得する (P489)
Private Declare Function GetPixel Lib "gdi32" _
        (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub Command1_Click()
    Dim i  As Long, j As Long
    Dim Co As Long
    With Picture1
    For i = 0 To .ScaleWidth - 1
        For j = 0 To .ScaleHeight - 1
            Co = .Point(i, j)
            'Co = GetPixel(.hdc, i, j)
            If Co <> QBColor(15) Then
                Debug.Print i, j, Co
            End If
        Next j
    Next i
    End With
End Sub

Private Sub Form_Load()
    Me.ScaleMode = vbPixels
    With Picture1
        .AutoRedraw = True
        .ScaleMode = vbPixels
        .Height = 120
        .Width = 160
        .BackColor = QBColor(15)
    End With
End Sub

投稿時間:2003/03/06(Thu) 01:09
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: VB Point(X,Y)について
フォローありがとうございます
またまたトチッテしまったようですね

投稿時間:2003/03/06(Thu) 00:13
投稿者名:アイジー
Eメール:
URL :
タイトル:
Re: VB Point(X,Y)について
ScaleModeは3にしていませんでした。
3にしてやってみます。
APIというのは、これから勉強してみます。
返信ありがとうございました。
これからも宜しくお願いします。