!各位大侠帮个忙吧!(自定义坐标的有关问题)

紧急求助!各位大侠帮个忙吧!!(自定义坐标的问题)
谢谢各位在百忙之中,能来帮我一下,不胜感激。

 是这样的,下面的代码只需两个元件:一个按钮(command1);一个图片框(picture1)

 在内存中创建的绘图区域其坐标默认的是:左上角(0,0) 右下角(L,H)。请问这个坐标如何才能自己定义呢?

 再次感谢!!分不多了,70分发了两次,每个帖子35。。。。各位高手不要嫌少啊。。


VB code
Option Explicit

Dim lngX As Double 'X的值
Dim L As Long '绘图区域的宽
Dim H As Long '绘图区域的高
Dim lngMemoryDC As Long '内存中绘图的设备场景的句柄
Dim lngBMPHandle As Long '位图的句柄
Dim lngBrushHandle As Long '填充刷子的句柄
Dim hRgn, jilu As Long '填充区域的句柄

Private Const SRCCOPY = &HCC0020

Private Type POINTAPI
  X As Long
  Y As Long
End Type

Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function Polyline Lib "gdi32 " (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long

Private Sub Command1_Click()
   
  Dim lngP, lngp1 As Long
    
  Dim PTS(6) As POINTAPI
  PTS(0).X = 10: PTS(0).Y = 10
  PTS(1).X = 100: PTS(1).Y = 10
  PTS(2).X = 100: PTS(2).Y = 200
  PTS(3).X = 200: PTS(3).Y = 200
  PTS(4).X = 200: PTS(4).Y = 10
  PTS(5).X = 300: PTS(5).Y = 10
  Dim hPen As Long
  hPen = CreatePen(0, 3, RGB(255, 0, 0))
  SelectObject lngMemoryDC, hPen
  lngP = Polyline(lngMemoryDC, PTS(0), 6)
    
  BitBlt Picture1.hdc, 0, 0, L, H, lngMemoryDC, 0, 0, SRCCOPY
   
End Sub

Private Sub Form_Load()

  Dim lngP As Long
  L = Picture1.ScaleWidth / 15
  H = Picture1.ScaleHeight / 15
    
  lngMemoryDC = CreateCompatibleDC(Picture1.hdc) '创建一个与窗体相兼容的设备场景
  lngBMPHandle = CreateCompatibleBitmap(Picture1.hdc, L, H) '在内存中创建与窗体同样大小的位图
  SelectObject lngMemoryDC, lngBMPHandle '将位图选入刚才创建的设备场景中
  hRgn = CreateRectRgn(0, 0, L, H) '创建一个与窗体同样大小的矩形区域
  lngBrushHandle = CreateSolidBrush(RGB(255, 255, 255)) '用白色创建一个实色画刷
  lngP = FillRgn(lngMemoryDC, hRgn, lngBrushHandle) '用创建的画刷对该区域进行填充
    
End Sub


------解决方案--------------------
说一下自定义坐标系的原理:

图象显示出来的最小单位就是点

假如有个标准坐标系是左上(0,1000)-右下(1000,0)的范围.

而你将其定义为了左上(0,-2000) - 右下(-2000,0)的自定义坐标系,也就是相反并范围不同的坐标系.

它们的物理位置是重合的.

那现在希望在自定义坐标系的(-200,-100)处绘一个点,则需要做如下转换:

标准X = 标准X范围 * ABS(自定义X / 自定义X范围)
标准Y = 标准Y范围 * ABS(自定义Y / 自定义Y范围)

引入后:

标准X = 1000 * ABS(-200 / 2000)
标准Y = 1000 * ABS(-100 / 2000)

得到需要绘制的实际坐标是(100,50).

你需要对每个写入的象素进行这样的转换.