[wp7 인앱 스크린샷]Silverlight #WP7 애플리케이션 내에서 스크린샷 찍기

7781 단어 은빛
링크 제공해주신 @린 융젠 제이크 감사합니다 ㅠㅠ 앞으로 못찾아서 넘길까봐
 
종종 애플리케이션 페이지의 스크린샷을 찍고 싶을 때가 있습니다. 여러 가지 이유가 있을 수 있습니다. 예를 들어 이를 사용하여 베타 테스터에게 쉬운 피드백 방법을 제공할 수 있습니다. 사용자는 빠른 스크린샷을 찍어 이메일에 첨부하여 Windows Phone 장치에서 직접 나에게 보낼 수 있습니다. 그러나 동일한 메커니즘을 사용하여 스크린샷을 제공할 수도 있습니다. 사용자가 자신의 애플리케이션 등의 현재 상태를 저장하기를 원합니다.

주의 사항


다음 사항에 유의하십시오.

  • 코드에서 미디어 라이브러리에 그림을 저장하려면 XNA 라이브러리가 필요합니다. 이를 위해서는 다음 단계를 따르세요.

  • 응용 프로그램(또는 클래스 라이브러리)에서 Microsoft.Xna.Framework에 대한 참조를 추가하십시오.
  • 코드에서 "using"문을 Microsoft.Xna.Framework.Media에 추가하십시오.
  • 속성 폴더에서 WMAppManifest.xml을 열고 ID_CAP_MEDIALIB 기능을 추가합니다.
  • 장치가 PC의 Zune 응용 프로그램에 연결된 경우 예외를 제외하고 메서드 호출이 실패합니다. 이를 방지하려면 테스트할 때 장치 연결을 끊거나 PC에서 Zune 응용 프로그램을 종료하십시오.
  • 에뮬레이터에서는 메서드 호출이 실패하지 않지만 미디어 라이브러리에 액세스할 수 있는 방법이 없으므로 이 플랫폼에서는 거의 쓸모가 없습니다.
  • 이 메서드는 Silverlight 요소만 출력 이미지에 인쇄합니다.예를 들어 WebBrowser 컨트롤의 콘텐츠와 같은 다른 요소는 검은색 사각형을 출력합니다.

  • 코드


     

     1 public static void SaveToMediaLibrary(
    2 FrameworkElement element,
    3 string title)
    4 {
    5 try
    6 {
    7 var bmp = new WriteableBitmap(element, null);
    8
    9 var ms = new MemoryStream();
    10 bmp.SaveJpeg(
    11 ms,
    12 (int)element.ActualWidth,
    13 (int)element.ActualHeight,
    14 0,
    15 100);
    16 ms.Seek(0, SeekOrigin.Begin);
    17
    18 var lib = new MediaLibrary();
    19 var filePath = string.Format(title + ".jpg");
    20 lib.SavePicture(filePath, ms);
    21
    22 MessageBox.Show(
    23 "Saved in your media library!",
    24 "Done",
    25 MessageBoxButton.OK);
    26 }
    27 catch
    28 {
    29 MessageBox.Show(
    30 "There was an error. Please disconnect your phone from the computer before saving.",
    31 "Cannot save",
    32 MessageBoxButton.OK);
    33 }
    34 }

    이 방법은 모든 FrameworkElement를 저장할 수 있습니다. 일반적으로 전체 페이지를 저장하는 데 사용하지만 다른 요소를 전달할 수도 있습니다.

  • 7행에서 새로운 WriteableBitmap을 생성합니다. 이 우수한 클래스는 시각적 트리를 비트맵으로 렌더링할 수 있습니다. 더 많은 기능을 사용하려면 훌륭한 WriteableBitmapEx 클래스 라이브러리(오픈 소스)를 사용할 수 있습니다.
  • 9~16행에서 WriteableBitmap을 MemoryStream에 저장합니다.기본적으로 지원되는 유일한 형식은 JPEG이지만 ImageTools 라이브러리가 있는 다른 형식(또한 오픈 소스)로 변환할 수 있습니다.
  • 18~20행은 Windows Phone 장치의 미디어 라이브러리에 사진을 저장합니다.

  • 이미지 사용


    이미지를 검색하려면 전화에서 사진 라이브러리를 실행하기만 하면 됩니다. 이미지는 저장된 사진에 있습니다. 여기에서 이미지를 공유하거나(예: 이메일로) Zune 소프트웨어를 사용하여 PC와 동기화할 수 있습니다.

    다른 플랫폼에 저장


    물론 미디어 라이브러리가 아닌 다른 플랫폼에 저장하는 것도 가능합니다. 예를 들어 이미지를 웹 서비스로 보내거나 장치의 격리된 저장소에 저장할 수 있습니다. 이렇게 하려면 MemoryStream을 사용하는 대신 다른 스트림(예: 웹 요청 스트림 또는 파일 스트림)을 사용하고 대신 저장할 수 있습니다.
    이 코드가 도움이 되길 바랍니다!
    즐거운 코딩,
    로랑
     
    원본 게시물: http://geek is with blog on .net/l you/archive/2010/12/28/taking-ah-screenshot-from-within-ah-Silverlight-I'm wonder 7-application.aspx
     
     

    public void CaptureScreen(object sender, EventArgs e)
    {
      WriteableBitmap bmp = new WriteableBitmap(480, 800);
      bmp.Render(App.Current.RootVisual, null);
      bmp.Invalidate();

      MemoryStream stream = new MemoryStream();
      bmp.SaveJpeg(stream, bmp.PixelWidth, bmp.PixelHeight, 0, 80);
      stream.Seek(0, SeekOrigin.Begin);

      MediaLibrary library = new MediaLibrary();
      string filename = "ScreenShot_" + DateTime.Now.ToString("yyyy-MM-dd_hh:mm:ss");
      library.SavePicture(filename, stream);
      stream.Close();
    }

     

    좋은 웹페이지 즐겨찾기