0
WPF를 사용하여 이미지를 클립 보드에 표시하고 있습니다. 이 기능은 그림판으로 복사하고 거기에 복사 할 때 잘 작동하지만 스크린 샷을 찍기 위해 "Print screen"을 누르면 출력과 화면 크기가 같은 검은 색 이미지 만 나타납니다.클립 보드에서 이미지 가져 오기 - 스크린 샷이 나타나면 검정색으로 표시됩니까?
어째서?
클립 보드에서 데이터를 가져 오는 코드는 다음과 같습니다 (예, 실제로 원시 API 호출을 사용하려고합니다).
...
case CF_BITMAP:
BitmapSource source = null;
System.Drawing.Bitmap finalBitmap = null;
IntPtr destinationHdc = CreateCompatibleDC(IntPtr.Zero);
if (destinationHdc != null)
{
IntPtr sourceHdc = CreateCompatibleDC(IntPtr.Zero);
if (sourceHdc != null)
{
if (OpenClipboard(MainWindow.Handle))
{
IntPtr sourceBitmap = GetClipboardData((uint)clipboardFormat);
SelectObject(sourceHdc, sourceBitmap);
BITMAP bmp;
GetObject(sourceBitmap, Marshal.SizeOf(typeof(BITMAP)), out bmp);
IntPtr destinationBitmap = CreateCompatibleBitmap(destinationHdc, bmp.bmWidth, bmp.bmHeight);
SelectObject(destinationHdc, destinationBitmap);
BitBlt(destinationHdc, 0, 0, bmp.bmWidth, bmp.bmHeight, sourceHdc, 0, 0, 0x00CC0020);
CloseClipboard();
finalBitmap = System.Drawing.Bitmap.FromHbitmap(destinationBitmap);
}
DeleteDC(sourceHdc);
}
DeleteDC(destinationHdc);
}
if (finalBitmap != null && ((LastData == null || !(LastData is System.Drawing.Bitmap)) || !finalBitmap.EqualsTo((System.Drawing.Bitmap)LastData)))
{
source = BitmapToSource(finalBitmap);
if (LastData == null || source != LastData)
{
tile = new ImageTile();
(tile as ImageTile).Image.Source = source;
tile.RawData = finalBitmap;
}
}
return tile;
...
나는 특히 누군가가 pinvoke 선언을 생략 한 이후로 누군가가이 코드를 디버깅하도록 자원하고 있음을 심각하게 의심합니다. 여기 Clipboard.GetImage() 메서드를 사용하지 않는 것은 바보입니다. –
Clipboard.GetImage 함수는 버그가 있습니다. 실제로 .NET 4.0에서도 확인되었습니다. 이미지의 일부 유형 (예 : 단어 문서에서 나오는 이미지)이 충돌합니다. –
처음 들어 보았습니다. 필연적으로 클립 보드에 이미지를 놓는 코드의 품질에 달려 있습니다. try/catch의 문제점은 무엇입니까? –