我有一个512*512的的数据矩阵,每个元素是10位的数据,但用的2byte存储的
想用vb显示出来,可发现vb里好象都是显示rgb颜色的,没有专门显示灰度图的.
而且我的数据都比较集中,数值都在130左右.希望能在显示的时候颜色范围控制的小一点,可以使对比度高点.
    希望给我大虾不吝赐教

解决方案 »

  1.   


    把图像变成灰度:
    1。读取位图像素的rgb值,
    2。用读取的retval=(r+g+b)/3重新写回图像rgb(retval,retval,retval)
      

  2.   

    楼上正解,以下给出代码,其转换过程较长:
    Private Sub CmdGray_Click()
    '转换为灰度图像
        Dim red As Integer
        Dim green As Integer
        Dim blue As Integer
        Dim c As Long
        Dim graycolor As Long
        Dim x0 As Integer
        Dim y0 As Integer
        For x0 = 0 To Picture1.Width
        For y0 = 0 To Picture1.Height
            c = Picture1.Point(x0, y0)
            red = (c And &HFF)
            green = (c And 62580) / 256
            blue = (c And &HFF00) / 65536
            graycolor = (red + green + blue) / 3
            Picture2.PSet (x0, y0), RGB(graycolor, graycolor, graycolor)
            DoEvents
        Next
        Next
    End SubPrivate Sub CmdOpen_Click()
    '打开文件并显示在Picture1中
       On Error GoTo Err_handle
       CmnDlg1.DialogTitle = "打开"
       CmnDlg1.ShowOpen
       Picture1.Picture = LoadPicture(CmnDlg1.FileName)
       Picture2.Width = Picture1.Width
       Picture2.Height = Picture1.Height
       Exit Sub
    Err_handle:   Exit Sub
    End SubPrivate Sub CmdSave_Click()
    '保存转换后的图像
       On Error GoTo Err_handle
       CmnDlg1.DialogTitle = "保存"
       CmnDlg1.Filter = ("位图文件(*.bmp)|*.bmp")
       CmnDlg1.ShowSave
       SavePicture Picture2.Image, CmnDlg1.FileName
    Err_handle:   MsgBox Err.Description, vbOKOnly
                  Exit Sub
    End Sub
      

  3.   

    10位?你最到要用到1024去?
    我记得灰度的8bit就应该可以了吧,1个byte就可以保存了啊RGB是LONG 4Byte的,你把你的灰度值得出来,用RGB(GrayValue, GrayValue, GrayValue)获得对应的灰色,显示出来就OK了如果集中在130左右,可能看起来是一片灰色,如果有需要,可以酌情在GrayValue上增加一个量拉大色差.