2013-01-16 33 views
2

我想從本地磁盤加載圖像文件到一個writeablebitmap圖像,所以我可以讓用戶編輯它。當我創建一個WriteableBitmap對象時,構造函數需要pixelwidth和pixelheight參數,我不知道哪裏可以得到這兩個,任何人都可以提供幫助?如何從Windows8中的圖像文件創建一個writeablebitmap圖像

+0

如何從文件加載圖像? –

+0

通過FileOpenPicker – James

+0

但我想你通過一個** BitmapImage **或類似的東西,然後**加載圖像**你創建一個** WriteableBitmap **,對不對? –

回答

3

不在乎pixelWidth和pixelHeight當定義WriteableBitmap的圖像,請試試這個:如果你想有正確的像素寬度和高度

using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
{ 
    WriteableBitmap image = new WriteableBitmap(1, 1); 
    image.SetSource(stream); 
    WriteableBitmapImage.Source = image; 
} 
3

請嘗試下面的代碼。有一個簡單的方法來執行此操作(使用BitmapImage加載圖像,然後將此對象直接傳遞給WriteableBitmap構造函數,但我不確定這是否按預期工作,或者它有性能問題,不記得) :

BitmapSource bmp = BitmapFrame.Create(
    new Uri(@"C:\Users\Public\Pictures\Sample Pictures\Koala.jpg", UriKind.Relative), 
    BitmapCreateOptions.None, BitmapCacheOption.OnLoad); 

if (bmp.Format != PixelFormats.Bgra32) 
    bmp = new FormatConvertedBitmap(bmp, PixelFormats.Bgra32, null, 1); 
    // Just ignore the last parameter 

WriteableBitmap wbmp = new WriteableBitmap(bmp.PixelWidth, bmp.PixelHeight, 
    kbmp.DpiX, bmp.DpiY, bmp.Format, bmp.Palette); 

Int32Rect r = new Int32Rect(0, 0, bmp.PixelWidth, bmp.PixelHeight); 
wbmp.Lock(); 
bmp.CopyPixels(r, wbmp.BackBuffer, wbmp.BackBufferStride * wbmp.PixelHeight, 
    wbmp.BackBufferStride); 

wbmp.AddDirtyRect(r); 
wbmp.Unlock(); 
3

,你需要加載它首先將其轉換爲BitmapImage以填充它ectly:

StorageFile storageFile = 
    await StorageFile.GetFileFromApplicationUriAsync("ms-appx:///myimage.png"); 
using (IRandomAccessStream fileStream = await storageFile.OpenAsync(FileAccessMode.Read)) 
{ 
    BitmapImage bitmapImage = new BitmapImage(); 
    await bitmapImage.SetSourceAsync(fileStream); 

    WriteableBitmap writeableBitmap = 
     new WriteableBitmap(bitmapImage.PixelWidth, bitmapImage.PixelHeight); 
    fileStream.Seek(0); 
    await writeableBitmap.SetSourceAsync(fileStream); 
} 

(對於WinRT的應用程序)

相關問題