2013-04-22 156 views
1

我從頭像的圖像裁剪圓形區域。我需要獲取圖像的像素字節[]並以base64格式上傳到服務器。不幸的是,方法SaveJpeg()不支持所選圓外的透明度像素。我試過ImageTools庫,但沒有其他平臺,除了WindowsPhone無法從生成的字節[]中創建png圖像。有沒有辦法做到這一點?如何將WriteableBitmap保存爲帶有透明度的png圖像

+0

也許PngCs幫助? https://code.google.com/p/pngcs/ – leonbloy 2013-04-22 18:03:20

回答

1

此代碼爲我工作。在嘗試之前,請確保您的writablebitmap具有透明背景(您可以通過分配給圖像控制器圖像源進行檢查)。如果沒有,則使來自其的控制器透明。

var localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 
var file = await localFolder.CreateFileAsync("temp.png", CreationCollisionOption.ReplaceExisting); 
using (var ras = await file.OpenAsync(FileAccessMode.ReadWrite, StorageOpenOptions.None)) 
{ 
    WriteableBitmap bitmap = imageSource; 
    var stream = bitmap.PixelBuffer.AsStream(); 
    byte[] buffer = new byte[stream.Length]; 
    await stream.ReadAsync(buffer, 0, buffer.Length); 
    BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, ras); 
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight, (uint)bitmap.PixelWidth, (uint)bitmap.PixelHeight, 96.0, 96.0, buffer); 
    await encoder.FlushAsync(); 
} 

看看吧!