ワイドスクリーンモニタを持っていて、C#でwin APIを使ってスクリーン画像をキャプチャすると、キャプチャされた画像が広くなります。しかし、私は通常のアスペクト比1:1の画像を撮りたいです。 最初に画像を撮りたいのではなく、画像上のアイテムが不正な形になるため、サイズを変更する必要はありません。普通のアスペクト比のスクリーン画像をCでキャプチャする方法#
どうすればいいですか?これは可能ですか?
私はこのコードを使用しています:
public static Bitmap GetDesktopImage()
{
//In size variable we shall keep the size of the screen.
SIZE size;
IntPtr hDC = PlatformInvokeUSER32.GetDC(PlatformInvokeUSER32.GetDesktopWindow());
IntPtr hMemDC = PlatformInvokeGDI32.CreateCompatibleDC(hDC);
do{
size.cx = PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM_CXSCREEN);
size.cy = PlatformInvokeUSER32.GetSystemMetrics(PlatformInvokeUSER32.SM_CYSCREEN);
m_HBitmap = PlatformInvokeGDI32.CreateCompatibleBitmap(hDC, size.cx, size.cy);
} while (m_HBitmap == IntPtr.Zero);
if (m_HBitmap!=IntPtr.Zero)
{
IntPtr hOld = (IntPtr) PlatformInvokeGDI32.SelectObject(hMemDC, m_HBitmap);
PlatformInvokeGDI32.BitBlt(hMemDC,0, 0,size.cx,size.cy, hDC, 0, 0, PlatformInvokeGDI32.SRCCOPY);
PlatformInvokeGDI32.SelectObject(hMemDC, hOld);
PlatformInvokeGDI32.DeleteDC(hMemDC);
PlatformInvokeUSER32.ReleaseDC(PlatformInvokeUSER32.GetDesktopWindow(), hDC);
Bitmap res=System.Drawing.Image.FromHbitmap(m_HBitmap);
PlatformInvokeGDI32.DeleteObject(m_HBitmap);
return res;
}
return null;
}
解像度を4:3に変更すると時間がかかるでしょうか?私は毎秒頻繁に画面をキャプチャしたい。 –
はい、変更の解像度は恐ろしい考えですので、4:3の次元にクロップする必要があります。スケーリングを避けたい場合は、これは唯一のオプションです。 –