2013-12-12 44 views
0

我有一個益智遊戲,我可以創建關卡。當我保存一個關卡時,它會拍攝畫布的快照,然後當我選擇一個關卡時,它會將其名稱旁邊的所有關卡的圖片顯示爲縮略圖。不過每張圖片的大小都在1MB左右。我想讓他們的大小約爲30KB。另外,它所製作的文件不能由照片編輯器進行編輯,以使其尺寸更小,即使它是JPG格式。我看到我使用了TiffBitmapEncoder哎呀。可能是我的照片編輯問題。小文件大小的畫布快照 - C#WPF

這裏是我的代碼:

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(); 
} 

回答

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); 
    } 
} 
+0

謝謝。我如何設置尺寸? 96D?這做了一個300kb的圖片。我期待着降低一點。 – user2602079

+0

您是試圖從畫布裁剪,還是試圖調整輸出圖像的大小? '96d'就是DPI('d'指定它爲'double'的值)。 – Erik

+0

我希望輸出圖像與96d中的圖像相同。我只是希望圖像尺寸小於300kb以獲得更好的性能,所以我估計質量有點差。但隨着圖像變得更小,下降到30d會使圖像的大部分變黑。 – user2602079