클립 보드에 저장된 비트 맵 (예 : 페인트 등)을 복사하고 싶습니다.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()
외부 기능
GetclipboardData() 나는 값 8 (BITMAPINFO)를 사용하기위한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"
을, 2 (비트 맵)는 항상 0시를 반환하기 때문에 GlobalLock 함수를 호출합니다.
그래서 지금은 Blob에서 Bitmapinfo를 얻고 있지만 저장할 수는 없습니다. 항상 이미지가 손상되었다고 말합니다. bitmapinfo에서 비트 맵을 추출하고 싶었 기 때문에 of_writeblob 함수에서이 BlobMid를 모두 시도한 이유가 있습니다.
여기에서 "http://www.topwizprogramming.com/freecode_bitmap.html"은 bitmapinfo를 만들고 blobheader의 길이는 14이므로 해당 방법이 작동한다고 생각했지만 파일은 여전히 손상되었습니다. 정보에는 실제 비트 맵이 아니라 정보 만 포함되어 있다고 생각합니다.
아무도이 문제를 해결하지 못 했나요? 아니면 단순히 사용할 수있는 DLL이 있습니까?
편집 : topwiz 샘플에서 헤더, 정보 및 실제 비트 맵이 포함 된 전체 비트 맵을 작성하므로 내 시도가 실패 할 수 있습니다. 그래서 주요 문제는 Globallock 함수가 매개 변수 2를 사용하여 getclipboarddata를 호출 할 때 제로를 반환하는 이유입니다.