2013-01-30 4 views
1

그래서 내 WP8 앱에서 PhoneApplicationPage 내부에 DrawingSurfaceBackgroundGrid가 있습니다. 스크린 샷을 찍고 싶습니다. 지금까지 (구글에서) 말할 수있는 것처럼, 단순히 "스크린 샷 찍기"에 대한 호출이 없습니다. 어떤 사람들이하고있는 것은이처럼 WriteableBitmap을 사용하는 것입니다 : 나는 DrawingSurfaceBackgroundGrid 및하여 PhoneApplicationPage 모두로 테스트를 시도WP8에서 스크린 샷을 찍는 방법

WriteableBitmap wbmp = new WriteableBitmap(test, null); 
wbmp.SaveJpeg(isoStream2, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100); 

. 이들 중 어느 것도 나를 위해 일하고 있지 않습니다. RenderTargets 및 픽셀 쉐이더 (SharpDX)를 사용하여 모든 것을 렌더링한다는 사실과 관련이 있습니까? 나는 검은 이미지를 얻는다. 다음은 이미지를 저장하는 코드입니다.

IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication(); 

using (IsolatedStorageFileStream isoStream2 = new IsolatedStorageFileStream("new.jpg", FileMode.OpenOrCreate, isoStore)) 
{ 
    WriteableBitmap wbmp = new WriteableBitmap(test, null); 
    wbmp.SaveJpeg(isoStream2, wbmp.PixelWidth, wbmp.PixelHeight, 0, 100); 
} 

하지만 제가 말했던 것처럼, 그것은 단지 검은 색 이미지를 만듭니다.

아이디어가 있으십니까?

+0

WriteableBitmap 생성자는 실제로 이미지를 복사하거나 동일한 속성을 가진 비트 맵을 만듭니다. 저장하기 전에 비트 맵을 복사해야 할 수 있습니까? –

+0

흠. 나는 잘 모르겠다. WriteableBitmap.Pixels 배열을 살펴보면 그냥 검정색입니다. 그러나 적절한 크기의 이미지를 만드는 것처럼 보입니다. – Toadums

+1

테스트 란 무엇입니까? 이것을 시도하십시오 http://stackoverflow.com/questions/13837148/how-can-i-take-a-screenshot-full –

답변

0

"test"을 루트 그리드의 이름으로 변경하는 것을 제외하고 코드를 그대로 사용해 보았습니다. 내 응용 프로그램은 x:Name="LayoutRoot"이며 잘 작동합니다! 그냥 시험을 캡처하려는 요소, 해당 요소의 전체 페이지 또는 하위 요소 이름에 대한 루트 격자 이름으로 바꿉니다.


고마워요, 다람쥐에게 한 번 더 주셔서 감사합니다.

+0

테스트는 PhoneApplicationPage입니다. 나는 또한 내 효과가 렌더링하는 DrawingSurfaceBackgroundGrid로 시도했지만 LayoutRoot처럼 검은 색으로 남습니다. 답장을 보내 주셔서 감사합니다. :) – Toadums

+0

귀하의 질문을주의해서 읽지 않았고 설명 된 프로젝트 유형을 사용하지 않고 PhoneXamlDirect3DApp에서만 코드를 성공적으로 사용했기 때문에 미안합니다. –

0

아래 코드를 사용 중입니다. 그것은 미디어 갤러리에 저장하고 있지만.

WriteableBitmap bmpCurrentScreenImage = new WriteableBitmap((int)this.ActualWidth, (int)this.ActualHeight); 
bmpCurrentScreenImage.Render(LayoutRoot, new MatrixTransform()); 
bmpCurrentScreenImage.Invalidate(); 
using (var stream = new MemoryStream()) 
{ 
    // Save the picture to the Windows Phone media library. 
    bmpCurrentScreenImage.SaveJpeg(stream, bmpCurrentScreenImage.PixelWidth, bmpCurrentScreenImage.PixelHeight, 0, quality); 
    stream.Seek(0, SeekOrigin.Begin); 

    var picture = new MediaLibrary().SavePicture(name, stream); 
    return picture.GetPath(); 
} 
관련 문제