你说的没有什么问题吧!
将得到位图数据放到 byte() 数组中
再 setbitmapbits(bmp句柄,长度,数组)不就可以了吗

解决方案 »

  1.   

    因为是256色的位图,所以位图数据是调色板的索引值,这样当你的屏幕分辨率不是8位的时候,bitblt出来的东东可是乱七八糟的呀!
    这个问题的重点在于怎样通过得到的调色板数据重新整合为图数据,最后得到正确的图形,是否可用selectpalette等palette系列api解决?怎样解决?
      

  2.   

    SetDIBits 使用这个吧,虽然这个复杂很多,但不会出现兼容的问题。
      

  3.   

    你看一看这一贴
    http://www.csdn.net/expert/topic/176/176451.shtm
      

  4.   


    Public Type  
            palVersion As Integer 版本你试一试 &h300
            palNumEntries As Integer    为颜色数
            palPalEntry(255) As PALETTEENTRY  255是颜色数
    End TypePublic Type PALETTEENTRY
            peRed As Byte
            peGreen As Byte
            peBlue As Byte
            peFlags As Byte
    End Type用 copymemery 复制调色板数据到 LOGPALETTE.palPalEntry()
    createoalette() 建立句柄
    然后 selectpalette 再试一试
      

  5.   

    是否是用SetDIBitsToDevice把数组直接写到dc里面,可以绕开bitmap了?
      

  6.   

    你首先将调色板数据和图像数据分开。Private Type RGBQUAD
      rgbBlue As Byte
      rgbGreen As Byte
      rgbRed As Byte
      rgbReserved As Byte
    End Type
    Private Type BITMAPINFOHEADER '40 bytes
      biSize As Long
      biWidth As Long
      biHeight As Long
      biPlanes As Integer
      biBitCount As Integer
      biCompression As Long
      biSizeImage As Long
      biXPelsPerMeter As Long
      biYPelsPerMeter As Long
      biClrUsed As Long
      biClrImportant As Long
    End Type
    Private Type BITMAPINFO_1BPP
      bmiHeader As BITMAPINFOHEADER
      bmiColors(0 To 1) As RGBQUAD
    End Type
    Private Type BITMAPINFO_4BPP
      bmiHeader As BITMAPINFOHEADER
      bmiColors(0 To 15) As RGBQUAD
    End Type
    Private Type BITMAPINFO_8BPP
      bmiHeader As BITMAPINFOHEADER
      bmiColors(0 To 255) As RGBQUAD
    End Type
    Private Type BITMAPINFO_ABOVE8
      bmiHeader As BITMAPINFOHEADER
    End TypePrivate Const DIB_PAL_COLORS = 1 '  color table in palette indices
    Private Const DIB_PAL_INDICES = 2 '  No color table indices into surf palette
    Private Const DIB_PAL_LOGINDICES = 4 '  No color table indices into DC palette
    Private Const DIB_PAL_PHYSINDICES = 2 '  No color table indices into surf palette
    Private Const DIB_RGB_COLORS = 0 '  color table in RGBsPrivate Declare Function GetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As Any, ByVal wUsage As Long) As Long
    Private Declare Function SetDIBits Lib "gdi32" (ByVal hdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As BITMAPINFO, ByVal wUsage As Long) As Long
    Private Sub Command1_Click()
    On Error Resume Next
      Dim tBI As BITMAPINFO_8BPP
      Dim Bit() As Byte, lSize1 As Long
        With tBI.bmiHeader
          .biSize = Len(tBI.bmiHeader)
          .biWidth = 图片宽
          .biHeight = 图片高
          .biPlanes = 1
          .biBitCount = 8
          .biCompression = BI_RGB
        End With
        
        '调色数据
        For i = 0 To 255
          tBI.bmiColors(i).rgbRed = r
          tBI.bmiColors(i).rgbGreen = g
          tBI.bmiColors(i).rgbBlue = b
        Next
        
    'P是图片框
        lSize1 = 图片宽
        lSize1 = lSize1 * 3
        lSize1 = ((lSize1 + 3) / 4) * 4
        lSize1 = lSize1 * 图片高    'bit()是图像数据
        SetDIBits P.hdc, hbmp, 0, 图片高, Bit(0), tBI, DIB_RGB_COLORSEnd Sub
      

  7.   

    我看了msdn说调色板位图需要DIB_PAL_COLORS参数,而且还有一个setdibcolortable可以使用,请解释,非常感谢
      

  8.   

    Dim BFH As BITMAPFILEHEADER
    Dim BIH As BITMAPINFOHEADER
    Dim BMPBits() As Byte
    Dim FN As Long
    Dim picTmp As Long, h As Long
    Dim BI As BITMAPINFOFN = FreeFile
    Open sFileName For Binary As #FN
    Get #FN, , BFH
    Get #FN, , BI.bmiHeader
    ReDim BMPBits(BI.bmiHeader.biWidth * BI.bmiHeader.biHeight)
    Get #FN, , BI.bmiColors()
    Seek #FN, 1078
    Get #FN, , BMPBits()
    Close #FNpicTmp = CreateDIBSection(GetDC(0), BI, DIB_PAL_COLORS, ByVal 0&, ByVal 0&, ByVal 0&)h = CreateCompatibleDC(GetDC(0))SetDIBits h, picTmp, 0, BI.bmiHeader.biHeight, BMPBits(0), BI, DIB_PAL_COLORS
    SelectObject h, picTmp
    SetDIBColorTable h, 0, 256, BI.bmiColors(0)
    DeleteObject picTmp
    象这样能够图形是对的,但是颜色是乱的,请问怎样才正确???
      

  9.   

    自己解决了,用DIB_RGB_COLORS参数一切搞定,给分了...