有没有办法在 VB.net 中将像素坐标转换为笛卡尔坐标

大胆试试吧

我有一个大小为 1096 x 1004 的 PictureBox,SizeMode 设置为 StretchImage。通过考虑像素坐标上的 StrechImage 效果,我能够正确获取每个像素的坐标(请参阅下面的代码)。

现在我想要完成的是将这些像素坐标转换为笛卡尔坐标以便能够绘制图形。从长远来看,我将采用笛卡尔坐标并将它们转换为极坐标。

我尝试使用这种方法将像素坐标转换为笛卡尔坐标。

cartesianx = scalefactor*screenx - screenwidth / 2;
cartesiany = -scalefactor*screeny + screenheight / 2;

此方法不是将原点放在 (0,0) 处的图片框的中心。它似乎将原点设置为靠近图片框的左上角。对我缺少什么有任何想法吗?

下面是我将图像转换为 BitMap 并获取这些坐标并正确缩放它们的代码。

Imports System.IO

Public Class HomePanel

Dim realX As Int32
Dim realY As Int32

Private Sub HomePanel_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    chartImageDisplay_box.Image = Image.FromFile("C:\Users\UserB\Desktop\test.jpg")

End Sub


Private Sub chartImageDisplay_box_MouseMove(sender As Object, e As MouseEventArgs) Handles chartImageDisplay_box.MouseMove

    If (e.Button = MouseButtons.Left) Then
        ShowCoords(e.X, e.Y)
    End If

End Sub



Private Sub chartImageDisplay_box_MouseDown(sender As Object, e As MouseEventArgs) Handles chartImageDisplay_box.MouseDown
    If (e.Button = MouseButtons.Left) Then
        ShowCoords(e.X, e.Y)

        Dim MyBitmap As Bitmap
        MyBitmap = CType(chartImageDisplay_box.Image, Bitmap)
        'Me.BackColor = MyBitmap.GetPixel(realX, realY)
        rgbValue.Text = "RGB Value: " & MyBitmap.GetPixel(realX, realY).ToString()

    End If
    'printAllPixels()

End Sub


Private Sub ShowCoords(ByVal mouseX As Int32, ByVal mouseY As Int32)
    Dim realW As Int32 = chartImageDisplay_box.Image.Width
    Dim realH As Int32 = chartImageDisplay_box.Image.Height
    Dim currentW As Int32 = chartImageDisplay_box.ClientRectangle.Width
    Dim currentH As Int32 = chartImageDisplay_box.ClientRectangle.Height
    Dim zoomW As Double = (currentW / CType(realW, Double))
    Dim zoomH As Double = (currentH / CType(realH, Double))
    Dim zoomActual As Double = Math.Min(zoomW, zoomH)
    Dim padX As Double = If(zoomActual = zoomW, 0, (currentW - (zoomActual * realW)) / 2)
    Dim padY As Double = If(zoomActual = zoomH, 0, (currentH - (zoomActual * realH)) / 2)
    realX = CType(((mouseX - padX) / zoomActual), Int32)
    realY = CType(((mouseY - padY) / zoomActual), Int32)
    lblPosXval.Text = "X: " & If(realX < 0 OrElse realX > realW, "-", realX.ToString())
    lblPosYVal.Text = "Y: " & If(realY < 0 OrElse realY > realH, "-", realY.ToString())
    cartX.Text = "X: " 'Where to add the cart conversion for X
    cartY.Text = "Y: " 'Where to add the cart conversion for Y

End Sub


'Writes all the pixels to a text file along with RGB values for each pixel
Public Sub printAllPixels()
    Using writer As StreamWriter =
        New StreamWriter("C:\Users\UserB\Desktop\Pixels.txt")

        Dim MyBitmap As Bitmap
        MyBitmap = CType(chartImageDisplay_box.Image, Bitmap)


        For y = 0 To MyBitmap.Height - 1
            For x = 0 To MyBitmap.Width - 1
                writer.WriteLine("XY Coord: " & x & ", " & y & ";   " & MyBitmap.GetPixel(x, y).ToString)
            Next
        Next


    End Using
End Sub
End Class
the_lotus

我不知道变量的内容是否包含正确的值,但公式应该更像这样:

cartesianx = scalefactor * (screenx - (screenwidth / 2))
cartesiany = -scalefactor* (screeny - (screenheight / 2))

转换为 0,0 添加比例因子然后翻转 y。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法遍历列表并将所有内容转换为整数?

来自分类Dev

有没有办法在C ++中将JSON转换为XML?

来自分类Dev

有没有办法在FxCop 10.0中获取CAT.NET规则

来自分类Dev

有没有办法从图像返回实际的x,y坐标?

来自分类Dev

有没有办法抑制VB6中的“过程太大”错误?

来自分类Dev

有没有办法像为.NET应用程序那样为Delphi应用程序创建预编译的XSLT转换?

来自分类Dev

有没有办法通过protobuf-net使用IReadOnlyCollection <T> / IReadOnlyList <T>

来自分类Dev

有没有办法在Mac OS X上安装.net Framework 4.5.2或更高版本?

来自分类Dev

有没有办法在Android应用中访问android.net.EthernetManager?

来自分类Dev

给定行星的坐标(太阳,月亮等),有没有办法知道日期和时间?

来自分类Dev

有没有办法在.NET Core库中包含.NET Framework代码?

来自分类Dev

有没有办法在C ++中将赋值的'char **'转换为'double'?

来自分类Dev

有没有办法获取碰撞点的坐标?

来自分类Dev

有没有办法获得散点图中单个点的x和y坐标?

来自分类Dev

有没有办法在VB.net中播放不是console.bleep的笔记?

来自分类Dev

有没有办法将现有接口转换为功能接口?

来自分类Dev

有没有办法抑制VB6中的“过程太大”错误?

来自分类Dev

有没有办法在PowerPoint中查看/编辑对象的x,y坐标?

来自分类Dev

有没有办法在极坐标图上画点

来自分类Dev

Delphi FMX-有没有办法在Firemonkey中获取表单的X,Y坐标?

来自分类Dev

有没有办法将坐标转换为 Sikulix 中的位置对象?

来自分类Dev

VB .NET 中的 CDbl 和小数分隔符 - 有没有办法绕过区域设置?

来自分类Dev

有没有办法在vba(visual basic / VB.NET)中全部放在一行上?

来自分类Dev

有没有办法在CAPL中将整数转换为字符?

来自分类Dev

有没有办法根据重复值将坐标列表分成单独的部分?

来自分类Dev

有没有办法在java中将String[]转换为List<AyrrayList<>>?

来自分类Dev

有没有办法确定 UILabel 中的文本结束坐标?(不是标签框矩形)

来自分类Dev

有没有办法在excel中将列组转换为行?

来自分类Dev

有没有办法让 VB.NET RegEx.Replace 在 REPLACEMENT 参数中使用特殊字符?

Related 相关文章

  1. 1

    有没有办法遍历列表并将所有内容转换为整数?

  2. 2

    有没有办法在C ++中将JSON转换为XML?

  3. 3

    有没有办法在FxCop 10.0中获取CAT.NET规则

  4. 4

    有没有办法从图像返回实际的x,y坐标?

  5. 5

    有没有办法抑制VB6中的“过程太大”错误?

  6. 6

    有没有办法像为.NET应用程序那样为Delphi应用程序创建预编译的XSLT转换?

  7. 7

    有没有办法通过protobuf-net使用IReadOnlyCollection <T> / IReadOnlyList <T>

  8. 8

    有没有办法在Mac OS X上安装.net Framework 4.5.2或更高版本?

  9. 9

    有没有办法在Android应用中访问android.net.EthernetManager?

  10. 10

    给定行星的坐标(太阳,月亮等),有没有办法知道日期和时间?

  11. 11

    有没有办法在.NET Core库中包含.NET Framework代码?

  12. 12

    有没有办法在C ++中将赋值的'char **'转换为'double'?

  13. 13

    有没有办法获取碰撞点的坐标?

  14. 14

    有没有办法获得散点图中单个点的x和y坐标?

  15. 15

    有没有办法在VB.net中播放不是console.bleep的笔记?

  16. 16

    有没有办法将现有接口转换为功能接口?

  17. 17

    有没有办法抑制VB6中的“过程太大”错误?

  18. 18

    有没有办法在PowerPoint中查看/编辑对象的x,y坐标?

  19. 19

    有没有办法在极坐标图上画点

  20. 20

    Delphi FMX-有没有办法在Firemonkey中获取表单的X,Y坐标?

  21. 21

    有没有办法将坐标转换为 Sikulix 中的位置对象?

  22. 22

    VB .NET 中的 CDbl 和小数分隔符 - 有没有办法绕过区域设置?

  23. 23

    有没有办法在vba(visual basic / VB.NET)中全部放在一行上?

  24. 24

    有没有办法在CAPL中将整数转换为字符?

  25. 25

    有没有办法根据重复值将坐标列表分成单独的部分?

  26. 26

    有没有办法在java中将String[]转换为List<AyrrayList<>>?

  27. 27

    有没有办法确定 UILabel 中的文本结束坐标?(不是标签框矩形)

  28. 28

    有没有办法在excel中将列组转换为行?

  29. 29

    有没有办法让 VB.NET RegEx.Replace 在 REPLACEMENT 参数中使用特殊字符?

热门标签

归档