0

ユーザーコントロールをビットマップとしてレンダリングするための汎用Nugetパッケージ/ライブラリを探しています。イメージ コントロールにソースが読み込まれるのを待つなど、既知のユーザー コントロールでこれを機能させることができますが、これは汎用ソリューション (コントロールを渡し、ビットマップを返す) ほど簡単ではありません。SizeChanged/Loaded/LayoutUpdated イベントと組み合わせた Measure/Arrange 呼び出しが、すべての準備が完全に完了したことを知るのに役立つことを願っていましたが、予期したときにイベントが読み込まれません。私が気付いていない解決策、またはイベントをより適切に接続する方法はありますか?

4

1 に答える 1

2

Loadedページでイベントが発生した後、任意のコントロールをビットマップとしてレンダリングできます。たとえば、以下のコードは LayoutRoot と ContentPanel をビットマップにレンダリングし、携帯電話の画像ライブラリに jpg として保存します。

public MainPage() {
  InitializeComponent();

  Loaded += (s, e) => {
    SaveToMediaLibrary(GetBitmap(LayoutRoot), "LayoutRoot.jpg", 100);
    SaveToMediaLibrary(GetBitmap(ContentPanel), "ContentPanel.jpg", 100);
  };
}

private WriteableBitmap GetBitmap(FrameworkElement fe) {
  // This will make sure all content are sized properly before returning
  //fe.UpdateLayout();

  var bmp = new WriteableBitmap((int)fe.ActualWidth, (int)fe.ActualHeight);
  bmp.Render(fe, new MatrixTransform());         
  bmp.Invalidate();
  return bmp; 
}       

public void SaveToMediaLibrary(WriteableBitmap bitmap, string name, int quality) {   
  using (var stream = new MemoryStream())            {         
    // Save the picture to the Windows Phone media library.             
    bitmap.SaveJpeg(stream, bitmap.PixelWidth, bitmap.PixelHeight, 0, quality);   
    stream.Seek(0, SeekOrigin.Begin);            
    new MediaLibrary().SavePicture(name, stream);        
  }     
}
于 2013-07-16T21:03:54.467 に答える