2011-11-29 96 views
2

我有下一個問題,我需要使用調整大小將字節數組轉換爲WriteableBitmap。我寫下一個代碼。從Silverlight中的Image中呈現WriteableBitmap問題

private byte[] ResizeImage(byte[] array, double maxWidth, double maxHeight) 
{ 
    WriteableBitmap wb = null; 

    var stream = new MemoryStream(array); 
    stream.Seek(0, SeekOrigin.Begin); 
    var bmp = new WriteableBitmap(0, 0); 
    bmp.SetSource(stream); 
    stream.Close(); 
    var img = new Image(); 
    img.Source = bmp; 
    double scaleX = 1; 
    double scaleY = 1; 
    if (bmp.PixelHeight > maxHeight) 
    { 
     scaleY = maxHeight/bmp.PixelHeight; 
    } 
    if (bmp.PixelWidth > maxWidth) 
    { 
     scaleX = maxWidth/bmp.PixelWidth; 
    } 
    wb = new WriteableBitmap(0, 0); 
    var scale = Math.Min(scaleY, scaleX); 
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale }); 
    wb.Invalidate(); 
    return Utils.Encode(wb); 

} 

通話wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale });後,wb具有零個像素。

請幫忙。

回答

0

嘗試改變:

wb = new WriteableBitmap(0, 0); 

要:

wb = new WriteableBitmap(maxWidth, maxHeight); 
+0

結果是相同的( –

1
private byte[] ResizeImage(byte[] array, int maxWidth, int maxHeight) 
{ 
    var stream = new MemoryStream(array); 
    stream.Seek(0, SeekOrigin.Begin); 

    var bmp = new BitmapImage(); 
    bmp.SetSource(stream); 
    stream.Close(); 
    var img = new Image(); 
    img.Source = new BitmapImage(); 

    double scaleX = 1; 
    double scaleY = 1; 
    if (bmp.PixelHeight > maxHeight) 
    { 
     scaleY = maxHeight/bmp.PixelHeight; 
    } 
    if (bmp.PixelWidth > maxWidth) 
    { 
     scaleX = maxWidth/bmp.PixelWidth; 
    } 

    WriteableBitmap wb = new WriteableBitmap(maxWidth, maxHeight); 
    var scale = Math.Min(scaleY, scaleX); 
    wb.Render(img, new ScaleTransform() { ScaleX = scale, ScaleY = scale }); 
    wb.Invalidate(); 

    return Utils.Encode(wb); 
} 
+0

我說這不能幫助所有的像素具有0值看圖像dl.dropbox.com/ u/16517591/screen.png –

+0

這不是我改變的唯一東西,試試看,我測試了它,它對我很有用 – David

+0

我試了一下,情況是一樣的 –