测试完毕,我这里运行正常。 但按你 3F 的那些坐标,起伏很小啊,不象你的头像中那种效果。开始我还以为是我的代码问题呢。 Option ExplicitPrivate 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 arrData#(), lDataSum&Private Sub Command1_Click() Dim strSrcName$, strDesName$ strSrcName = "X:\Temp\3.bmp" strDesName = "X:\Temp\3-Proc.bmp" Picture1.AutoRedraw = True Picture1.AutoSize = True Picture1.ScaleMode = 3 Picture1.Picture = LoadPicture(strSrcName) DoEvents Call getData Call picProc SavePicture Picture1.Image, strDesName MsgBox "处理完成!", 64 End SubPrivate Sub getData() '获取数据 '你的实际数据可以用任意合适的方法得到 Dim i&, iFN&, strTemp$ i = 0 ReDim arrData(31) iFN = FreeFile() Open "X:\Temp\data.txt" For Input As iFN Do While (Not EOF(iFN)) Line Input #iFN, strTemp If (Len(strTemp) > 0) Then arrData(i) = Val(strTemp) i = i + 1 End If Loop lDataSum = i Close iFN End SubPrivate Sub picProc() Const RECTSIZE& = 40 '40×40的区域完全可以容纳光点 Const POINTSTEP# = 54.3 '光点平均间距 Const POINTCENT& = 456 '光点原始中心 Dim dStartX#, i& Dim hPicDC&, x&, y1&, y2& dStartX = 170 '第一点的中心 X 坐标 y1 = POINTCENT - RECTSIZE / 2 y2 = y1 + RECTSIZE hPicDC = Picture1.hDC For i = 0 To lDataSum - 1 x = dStartX + i * POINTSTEP - RECTSIZE / 2 Call BitBlt(hPicDC, x, arrData(i), RECTSIZE, RECTSIZE, hPicDC, x, y1, vbSrcCopy) Picture1.Line (x, y1)-(x + RECTSIZE, y2), vbBlack, BF Next End Sub
Picture1.AutoRedraw = True
Picture1.ScaleMode = vbPixels
'显示原始图片'
Dim pic As IPictureDisp
Set pic = LoadPicture("C:\WINDOWS\Web\Wallpaper\Bliss.bmp")
Picture1.PaintPicture pic, 0, 0
'将(0,0)-(32,32)位置下移'
Picture1.PaintPicture pic, 0, 32, 32, 32, 0, 0, 32, 32
'原始位置涂黑'
Picture1.Line (0, 0)-(32, 32), vbBlack, BF
End Sub
基线的值是一定的。信息数据是我们自己通过仪器采集到的。
背景是单一的黑颜色。
谢谢!
过会儿写代码。
但按你 3F 的那些坐标,起伏很小啊,不象你的头像中那种效果。开始我还以为是我的代码问题呢。
Option ExplicitPrivate 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 arrData#(), lDataSum&Private Sub Command1_Click()
Dim strSrcName$, strDesName$
strSrcName = "X:\Temp\3.bmp"
strDesName = "X:\Temp\3-Proc.bmp"
Picture1.AutoRedraw = True
Picture1.AutoSize = True
Picture1.ScaleMode = 3
Picture1.Picture = LoadPicture(strSrcName)
DoEvents
Call getData
Call picProc
SavePicture Picture1.Image, strDesName
MsgBox "处理完成!", 64
End SubPrivate Sub getData()
'获取数据
'你的实际数据可以用任意合适的方法得到
Dim i&, iFN&, strTemp$
i = 0
ReDim arrData(31)
iFN = FreeFile()
Open "X:\Temp\data.txt" For Input As iFN
Do While (Not EOF(iFN))
Line Input #iFN, strTemp
If (Len(strTemp) > 0) Then
arrData(i) = Val(strTemp)
i = i + 1
End If
Loop
lDataSum = i
Close iFN
End SubPrivate Sub picProc()
Const RECTSIZE& = 40 '40×40的区域完全可以容纳光点
Const POINTSTEP# = 54.3 '光点平均间距
Const POINTCENT& = 456 '光点原始中心
Dim dStartX#, i&
Dim hPicDC&, x&, y1&, y2&
dStartX = 170 '第一点的中心 X 坐标
y1 = POINTCENT - RECTSIZE / 2
y2 = y1 + RECTSIZE
hPicDC = Picture1.hDC
For i = 0 To lDataSum - 1
x = dStartX + i * POINTSTEP - RECTSIZE / 2
Call BitBlt(hPicDC, x, arrData(i), RECTSIZE, RECTSIZE, hPicDC, x, y1, vbSrcCopy)
Picture1.Line (x, y1)-(x + RECTSIZE, y2), vbBlack, BF
Next
End Sub
你给出的坐标本身“波幅”就很小。要使画出的图片有明显的“起伏感”,把“波幅”放大一定的倍率就行了。只要适当修改一下:
'Call BitBlt(hPicDC, x, arrData(i), RECTSIZE, RECTSIZE, hPicDC, x, y1, vbSrcCopy)
Call BitBlt(hPicDC, x, 808 + (arrData(i) - 808) * 15, RECTSIZE, RECTSIZE, hPicDC, x, y1, vbSrcCopy)
Const POINTCENT& = 456 '光点原始中心这两个值是怎么得到的?