질문에 대답하려면 : GetPixel() Win32 함수를 사용할 수 있습니다. 그러나이 상황에서는 과도한 행동입니다.
Pinvoke GetPixel
MSDN GetPixel
올바른 방법
은, 장치 컨텍스트를 얻는 것입니다 비트는 콘텐츠 블럭 전송.
편집 : 나는에서 PrintWindow를 사용하여 함께 몇 가지 코드를 던져 한
. 미디어 플레이어와도 잘 작동합니다. GetWindowRect는 최소화 된 Windows에 대해 잘못된 사각형을 반환합니다. 그러나 그것은보기 흉하지 않은 출발입니다.
[StructLayout(LayoutKind.Sequential)]
public struct Rect
{
internal Rect(int left, int top, int right, int bottom)
{
Left = left;
Top = top;
Right = right;
Bottom = bottom;
}
public int Left;
public int Top;
public int Right;
public int Bottom;
}
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PrintWindow(IntPtr hwnd, IntPtr hDC, uint nFlags);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hwnd, out Rect lpRect);
public void DumpWindow(IntPtr hwndSource, string filename)
{
Rect rc;
GetWindowRect(hwndSource, out rc);
var bmp = new Bitmap(rc.Right - rc.Left, rc.Bottom - rc.Top, PixelFormat.Format32bppArgb);
using (Graphics gBmp = Graphics.FromImage(bmp))
{
IntPtr hdcBmp = gBmp.GetHdc();
PrintWindow(hwndSource, hdcBmp, 0);
gBmp.ReleaseHdc(hdcBmp);
}
bmp.Save(filename);
}
Edit2가 : 그리고 당신은 DWM 데모 양식에 두 번째 버튼을 추가 할 경우,이 삽입 :
private void button1_Click(object sender, EventArgs e)
{
var w = (Window)lstWindows.SelectedItem;
DumpWindow(w.Handle, "test.bmp");
Process.Start("test.bmp");
}
여전히 빈 이미지를 보여줍니다 그것을?
getpixelhint에 감사드립니다. 이제 투영 된 사각형의 색상을 검색 할 수 있지만 약간의 blit도 제공합니다. – user3289727
좋아, 비트 블릿 방식과 포스트 셋 코드를 tryed했지만 두 결과 모두 동일한 결과를 보여준다. http://imgur.com/07kPulZ,Hj9HSX7 (인쇄 키를 사용하여 창으로 만 가져옴)처럼 보이지만 http://imgur.com/07kPulZ,Hj9HSX7#1 – user3289727
과 같이 보이게됩니다. 파일은 어떻게 생겼습니까? edit2에서 코드를 시험해보고 다시보고하십시오. – JonPall