0
キャンバスに別の画像を描画して、キャンバスにコラージュをpngファイルとして保存しようとしています。私の問題は翻訳が正しくないということです。例えば。位置xが600の場合、画像は〜550で描画されます。何か案は?WPFでコラージュを作成 - 固定位置、中心を中心に回転
System.Windows.Controls.Image img = new System.Windows.Controls.Image();
img.Source = new BitmapImage(new System.Uri(System.Environment.CurrentDirectory + "/" + filename, System.UriKind.RelativeOrAbsolute));
img.RenderTransformOrigin = new System.Windows.Point(0.5, 0.5);
TransformGroup tg = new TransformGroup();
double scaleX = (double)w/(double)img.Source.Width;
double scaleY = (double)h/(double)img.Source.Height;
tg.Children.Add(new ScaleTransform(scaleX, scaleY));
tg.Children.Add(new RotateTransform(b.Rotation));
tg.Children.Add(new TranslateTransform(x, y));
img.RenderTransform = tg;
canvas.Children.Add(img);
double dpi = 96d;
RenderTargetBitmap rtb = new RenderTargetBitmap(1700, 1200, dpi, dpi, System.Windows.Media.PixelFormats.Default);
canvas.UpdateLayout();
rtb.Render(canvas);
BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
using (var fs = System.IO.File.OpenWrite("test.png"))
{
pngEncoder.Save(fs);
}
EDIT:RenderTransformOriginの問題が発生します。位置を変えずにイメージセンターを中心にどのように回転できますか?
TransformGroupはどこに適用されますか?なぜあなたは単に 'rtb.Render(canvas)'を呼び出すことができるDrawingVisualとVisualBrushを使っていますか? – Clemens
あなたは正しいです。 'DrawingVisual'は必要ありません。私はそれを削除した。 'RenderTransformOrigin'を設定するとすぐに問題が発生します – daniel
TransformGroupのトランスフォームの順序を変更してみてください。つまり、最初にrotateしてからtranslateしてみてください。 – Clemens