1

WPF (すべての新しい画像操作ツールを使用) でこれを実行しようとすると、ここで大騒ぎになりますが、有効な解決策が見つからないようです。これまでのところ、すべてのソリューションは画面に描画するか、複数の保存を行っていますが、これを完全にメモリ内で行う必要があります。

基本的に、大きな jpeg をメモリにロードし、サイズを小さくして (メモリ内で)、小さな PNG ファイルとして保存します。jpeg ファイルを BitMap オブジェクトに読み込むことができます。その後、私は困惑しています。

トリックを実行しているように見えるこの関数を見つけましたが、ImageSource が必要です (残念ながら、メモリ内の BitMap オブジェクトを NULL 例外を発生させない ImageSource に変換する方法が見つかりません)。

private static BitmapFrame CreateResizedImage(ImageSource source, int width, int height, int margin)
{
    dynamic rect = new Rect(margin, margin, width - margin * 2, height - margin * 2);

    dynamic @group = new DrawingGroup();
    RenderOptions.SetBitmapScalingMode(@group, BitmapScalingMode.HighQuality);
    @group.Children.Add(new ImageDrawing(source, rect));

    dynamic drawingVisual = new DrawingVisual();
    using (drawingContext == drawingVisual.RenderOpen()) 
    {
        drawingContext.DrawDrawing(@group);
    }

    // Resized dimensions
    // Default DPI values
    dynamic resizedImage = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
    // Default pixel format
    resizedImage.Render(drawingVisual);

    return BitmapFrame.Create(resizedImage);
}
4

1 に答える 1