我想複製保存在剪貼板中的位圖,即Paint等。PowerBuilder - 從剪貼板複製位圖
到目前爲止我的代碼如下:
ulong l_handle, l_datasize, l_lock
long l_file
uint i_format
blob lb_blob
n_bitmap ln_bit
l_handle = handle(parent)
OpenClipboard(l_handle)
//2 = Bitmap
//8 = Bitmapinfo
if not IsClipboardFormatAvailable(8) then
closeclipboard()
return
end if
l_handle = GetclipboardData(8)
l_lock = GlobalLock(l_handle)
if not isnull(l_lock) then
l_datasize = GlobalSize(l_lock)
if l_datasize>0 then
lb_blob = blob(space(l_datasize), EncodingAnsi!)
ReadClipboardData(lb_blob, l_lock, l_datasize)
GlobalUnlock(l_handle)
closeClipboard()
if not isnull(lb_blob) then
//l_file = fileopen("c:\temp\test.dib", StreamMode!, Write!, LockReadWrite!, Replace!)
ln_bit.of_writeblob("c:\temp\test.bmp", lb_blob)
ln_bit.of_writeblob("c:\temp\test1.bmp", BlobMid(lb_blob, 15))
ln_bit.of_writeblob("c:\temp\test2.bmp", BlobMid(lb_blob, 169))
ln_bit.of_writeblob("c:\temp\test3.bmp", BlobMid(lb_blob, 14))
ln_bit.of_writeblob("c:\temp\test4.bmp", BlobMid(lb_blob, 168))
//FileWriteEx(l_file, lb_blob)
//fileclose(l_file)
//p_1.setpicture(lb_blob)
end if
end if
GlobalUnlock(l_handle)
end if
closeClipboard()
外部函數
Function Ulong GetClipboardData (&
uint uFormat&
) Library "user32.dll"
Function boolean OpenClipboard (&
long hWndNewOwner &
) Library "user32.dll"
Function boolean CloseClipboard (&
) Library "user32.dll"
Function ulong GlobalLock(&
ulong hMem&
) Library "kernel32.dll"
Function boolean GlobalUnlock(ulong hMem) Library "kernel32.dll"
SUBROUTINE ReadClipboardData(ref blob Destination, ulong Source, ulong&
Length) Library "KERNEL32.DLL" Alias for "RtlMoveMemory"
FUNCTION ulong GlobalSize(ulong hMem) Library "kernel32.dll"
FUNCTION boolean IsClipboardFormatAvailable(ulong format) Library "user32.dll"
爲GetclipboardData()我使用值8(BITMAPINFO),因爲2(位圖)總是返回零時調用GlobalLock函數。
所以現在我得到了Blob中的Bitmapinfo,但無法保存它。 它總是說圖像已損壞。 我在of_writeblob函數中嘗試了所有BlobMid內容的原因是因爲我想從bitmapinfo中提取位圖(如果可能的話)。
在這裏「http://www.topwizprogramming.com/freecode_bitmap.html」他們正在創建一個bitmapinfo和blobheader長度爲14,所以我認爲它可能會這樣工作,但該文件仍然受損。我想信息只包含信息而不是實際的位圖。
有沒有人解決過這個問題,還是有一個DLL我可以簡單地使用?
編輯:在topwiz示例中,他們正在創建一個帶有標題,信息和實際位圖的完整位圖,所以我的嘗試只能失敗。 所以,主要問題是,爲什麼Globallock函數返回零時調用getclipboarddata與參數2