我有一个益智游戏,我可以创建关卡。当我保存一个级别时,它会拍摄画布的快照,然后当我选择一个级别时,它会将其名称旁边的级别的所有图片显示为缩略图。但是每个图像的大小约为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();
}
答案 0 :(得分:2)
哦,我的,你使用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);
}
}