2012-05-08 7 views
0

제목이 .....입니다.Silverlight/클립 보드의 클립 보드에서 이미지 가져 오기

나는 해결책을 찾을 수 있었다 here.

그러나 솔루션은 먼저 이미지를 임시 파일에 기록하고 스트림으로 읽습니다.

그래서 내가 솔루션을 수정하는 것을 시도하고있다, 여기 ... 내가 6시간을 위해 노력 해왔다 사례입니다 : 대신 사용하여 스트림에서 직접 읽어

사례 1)

:

internal static extern int GdipSaveImageToStream(GpImage *image, IStream* stream, GDIPCONST CLSID* clsidEncoder, GDIPCONST EncoderParameters* encoderParams); 

으로 변 :

[DllImport("gdiplus.dll", ExactSpelling=true, CharSet=CharSet.Unicode)] 
internal static extern int GdipSaveImageToStream(IntPtr image, IntPtr stream, [In] ref Guid Encoder, IntPtr encoderParams); 
,

나는 스트림 매개 변수로 IntPtr.Zero 전달하려고했으나를 IntPtr로 출력 결과는 여전히 제로 ... 실패 ...

사례 2)

의 해보자는 ... 게시물 중 하나와 같은 픽셀 데이터를 얻을 말했다. 적어도 내가 데이터를 볼 수 있습니다 이제

[DllImport("gdi32.dll")] 
static extern int GetBitmapBits(IntPtr hbmp, int cbBuffer, [Out] byte[] lpvBits); 

: 나 이미지의 크기를 알고 가정의가 GetBitMapBits를 사용 해보자 그래서

[DllImport("user32.dll")] 
static extern IntPtr GetClipboardData(uint uFormat); 

:

는 내가 전화 GetClipboardData로 HBITMAP을 얻을 수있어 복사하지만 GetBitMapBits되는 것은 ... 16 비트 윈도우 실패

사례 3)이다

,

좋아 ......

, 그래서 ... 픽셀 데이터를 얻을 수

[DllImport("gdi32.dll")] 
public static extern int GetDIBits(IntPtr hdc, IntPtr hbmp, uint uStartScan, 
            uint cScanLines, [Out] byte[] lpvBits, ref BitmapInfo lpbmi, uint uUsage); 

를 GetDIBits을 사용해야하지만 클립 보드에 대한 장치 컨텍스트를 얻을 수있는 지금 문제는 ....입니다

그리고 더 이상 어떻게 심지어 너비 및 클립 보드 이미지의 높이에 대해 알고 .....

는 WPF /의 WinForm에서 우리는 쉽게 할 수 FromHBitmap 방법있을 것입니다. 필자는 파일로 작성하고 읽는 것 외에 다른 방법을 생각할 수 없다. 또는이 문제를 해결하기 위해 COM을 작성하십시오 ....

누구나 해결책이 있습니까?

구글, MSDN 및 실험 시간 후

답변

0

는 ... 내가 실제로 IntPtr.Zero를 사용하여 HBITMAP에서 BITMAPINFO를 얻을 수 있다는 것을 발견

..
hDC = User32.GetDC(IntPtr.Zero); 
Gdi32.GetDIBits(hDC, hBitmap, 0, 1, null, ref bi, DIB_RGB_COLORS); 

나에게를 줄 것이다 너비, 이미지의 높이를 포함하는 BitmapInfo입니다.

그럼 지금은 그래서 지금 내가 사용할 수있는, 내가 필요한 바이트 배열의 크기를 caculate하는 폭과 높이를 사용할 수 있습니다

내 binaryData 간다
//Similiarly, hMemDC is also a device context that created using IntPtr.Zero. 
Gdi32.GetDIBits(hMemDC, hBitmap, 0, (uint)pixelHeight, binaryData, ref bi, DIB_RGB_COLORS); 

, 나는 마지막에 매핑 할 수 있습니다 내 Height, Width, Byte [] : WriteableBitmap

+1

나는 같은 목표를 달성하려고 노력하고있다. 솔루션에 대한 자세한 내용을 제공 할 수있는 기회가 있습니까? – McAden

관련 문제