以下是我仿胖無極的PB代碼, 但生成的圖片無法預覽! 請賜教! Tks!
ulong hbmp, dwBPP, dwNumColors
long ll_hdc, ll_mem, mybitmap
bitmap bmp
blob{14} lbl_header
blob{40} lbl_info
blob b_imagedata
ulong dwImageSize
n_api.OpenClipBoard(0)
hbmp = n_api.GetClipBoardData(2)
ll_hdc = getdc( handle(aw_win)) //aw_win: 為傳入的父窗體參數
ll_mem = CreateCompatibleDC(ll_hdc)
SelectObject(ll_mem, hbmp)
SetMapMode(ll_mem, GetMapMode(ll_hdc))
GetObject(hbmp, 24, ref bmp)
BitBlt(ll_hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, ll_mem, 0, 0, SRCCOPY)
mybitmap = CreateCompatibleBitmap (ll_hdc,bmp.bmWidth,bmp.bmHeight)
BitmapInfo lstr_Info
BitmapFileHeader lstr_Header
dwBPP = n_api.GetDeviceCaps(ll_hdc, n_api.BITSPIXEL)
if dwBPP <= 8 then
dwNumColors = n_api.GetDeviceCaps(ll_hdc, n_api.NUMCOLORS)
else
dwNumColors = 0
end if
dwImageSize = bmp.bmWidth * bmp.bmHeight * dwBPP / 8
//填充BitmapFileHeader
lstr_Info.bmiheader.biSize = 40
lstr_Info.bmiheader.biWidth = bmp.bmWidth
lstr_Info.bmiheader.biHeight = bmp.bmHeight
lstr_Info.bmiheader.biPlanes = 1
lstr_Info.bmiheader.biBitCount = dwBPP
lstr_Info.bmiheader.biCompression = 0
lstr_Info.bmiheader.biSizeImage = dwImageSize
lstr_Info.bmiheader.biXPelsPerMeter = 0
lstr_Info.bmiheader.biYPelsPerMeter = 0
lstr_Info.bmiheader.biClrUsed = dwNumColors
lstr_Info.bmiheader.biClrImportant = dwNumColors
b_imagedata = blob(space(dwImageSize))
GetDIBits(ll_hdc, mybitmap, 0, bmp.bmHeight,ref b_imagedata, lstr_Info, 0)
lstr_Header.bfType[1] = 'B'
lstr_Header.bfType[2] = 'M'
lstr_Header.bfSize = dwImageSize + &
14/*sizeof(bitmapfileheader)*/ + &
40/*sizeof(bitmapinfoheader)*/+&
dwNumColors * 4
lstr_Header.bfReserved1 = 0
lstr_Header.bfReserved2 = 0
lstr_Header.bfOffBits = 14/*sizeof(bitmapfileheader)*/ + &
40/*sizeof(bitmapinfoheader)*/+&
dwNumColors * 4
CopyBitmapFileHeader(lbl_header, lstr_Header, 14/*sizeof(bitmapfileheader)*/ )
CopyBitmapInfo(lbl_Info, lstr_Info, 40/*sizeof(bitmapinfoheader)*/)
b_imagedata = lbl_header + lbl_info + b_imagedata
save2file('d:/zls.bmp', b_imagedata) //此處將Blob數據寫入到文件中
DeleteObject(mybitmap)
DeleteDC(ll_mem)
n_api.CloseClipBoard()
return true