小文件大小的画布快照-C#WPF

本文关键字:快照 -C#WPF 布快照 文件大小 | 更新日期: 2024-09-19 21:08:37

我有一个益智游戏,我可以创建关卡。当我保存级别时,它会拍摄画布的快照,然后当我选择一个级别时,会将级别名称旁边的所有图片显示为缩略图。然而,每个图像的大小约为1MB。我想让它们的大小达到30KB左右。此外,即使是jpg格式的文件,照片编辑器也无法对其进行编辑以使其变小。我看到我用了一个TiffBitmapEncoder欢呼。可能是我和照片编辑的问题。

这是我的代码:

private void saveImage(object sender, EventArgs e)
{
    string path = myImageNamePath;
    FileStream fs = new FileStream(path, FileMode.Create);
    RenderTargetBitmap bmp = new RenderTargetBitmap((int)myLevelDesigner.pbxMap.ActualWidth,
        (int)myLevelDesigner.pbxMap.ActualHeight, 1 / 96, 1 / 96, PixelFormats.Pbgra32);
    bmp.Render(myLevelDesigner.pbxMap);
    BitmapEncoder encoder = new TiffBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bmp));
    encoder.Save(fs);
    fs.Close();
}

小文件大小的画布快照-C#WPF

天哪,使用TIFF文件格式有什么特别的原因吗?我强烈建议使用PNG,因为它是无损和压缩的。

使用PngBitmapEncoder,大多数图形程序都支持PNG。

我还建议将其作为一种扩展方法,以便您可以在整个过程中重用。类似这样的东西:

public static class CanvasExtender
{
  public static void SaveToImageFile(this Canvas canvas, string outputFile)
  {
    canvas.UpdateLayout();
    var bitmap = new RenderTargetBitmap(canvas.ActualWidth, canvas.ActualHeight, 96d, 96d, PixelFormats.Pbgra32);
    bitmap.Render(canvas);
    var encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bitmap));
    using(var outputStream = File.Create(outputFile))
      encoder.Save(outputStream);
  }
}