将我头像图片的上面的一横排发光点,处理成下面一排的形式,请各位帮忙啊!~~~ 我们的图片量很大,而且还有一定要求,每个点都有一定的信息,通过判断,将这个发光点挪到那条红色直线的上面或者是下面。代码能实现将图片上的发光点挪动即可,后续我自己可以处理!
谢谢!

解决方案 »

  1.   

    Option ExplicitPrivate Sub Form_Load()
        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
      

  2.   

    演示图片是CCD采集的。
    基线的值是一定的。信息数据是我们自己通过仪器采集到的。
    背景是单一的黑颜色。
    谢谢!
      

  3.   

    晕,bmp图片打包压缩一下吧,刚才快完成时,半天没反应了。只好重新下载……
      

  4.   

    bmp 的已经下载完了。
    过会儿写代码。
      

  5.   

    测试完毕,我这里运行正常。
    但按你 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
      

  6.   

    那个图片处理程序是用LABVIEW做的,呵呵,我没有源码。
      

  7.   

    其实没什么参考不参考的。
    你给出的坐标本身“波幅”就很小。要使画出的图片有明显的“起伏感”,把“波幅”放大一定的倍率就行了。只要适当修改一下:
    '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)
      

  8.   

      Const POINTSTEP# = 54.3   '光点平均间距
      Const POINTCENT& = 456    '光点原始中心这两个值是怎么得到的?
      

  9.   

    用 photoshop 查看的啊,以象素为单位。这些数据是从你给我的 3.bmp 中取得的。