これが私の関数です:
private byte[] GetByteArray(IPhotoObject photo)
{
_addCanvas.RenderTransformOrigin = new Point(0.5, 0.5);
_addCanvas.RenderTransform = new RotateTransform(90.0);
BinaryImageConverter converter = new BinaryImageConverter();
Image i = new Image();
BitmapSource source = (BitmapImage)converter.Convert(photo.ImageBytes, typeof (BitmapSource), null, null);
i.Stretch = Stretch.None;
i.Width = source.PixelWidth;
i.Height = source.PixelHeight;
i.SetValue(Image.SourceProperty,source);
var width = source.PixelWidth;
var height = source.PixelHeight;
Canvas canvas = new Canvas();
canvas.Width = width;
canvas.Height = height;
canvas.Children.Add(i);
canvas.Children.Add(_addCanvas);
var size = new Size(width, height);
var rect = new Rect(size);
canvas.Measure(size);
canvas.Arrange(rect);
RenderTargetBitmap bmp = new RenderTargetBitmap(
Convert.ToInt32(width),
Convert.ToInt32(height),
96.0,
96.0,
PixelFormats.Default);
bmp.Render(canvas);
return XImage.GetJpegByteArrayFromWritableBitmap(new WriteableBitmap(bmp));
}
私の問題は_addCanvasです。ビットマップに描画されていません。回転用の線を削除すると、_addCanvasがビットマップに描画されますが、_addCanvasを回転させる必要があります。
_addCanvasには、単純な形状(正方形、円、線)とTextBoxを含む子があります。
_addCanvasでMeasure、Arrange、およびUpdateLayoutを呼び出してみましたが、役に立ちませんでした。回転させた場合、ビットマップには入りません。