2013-01-16 2 views
2

로컬 디스크에서 writeablebitmap 이미지로 이미지 파일을로드하여 사용자가 편집 할 수있게하고 싶습니다. WriteableBitmap 객체를 만들 때 생성자는 pixelwidth와 pixelheight 매개 변수가 필요합니다. 어디에서이 두 가지를 얻을 수 있는지 알 수 없으므로 누구나 도움이 될 수 있습니까?windows8의 이미지 파일에서 writeablebitmap 이미지를 만드는 방법

+0

당신은 어떻게 파일에서 이미지를로드 할 수 있습니까? –

+0

통해 FileOpenPicker – James

+0

하지만 ** BitmapImage **를 통해 이미지를로드하고 ** 그런 다음 ** ** WriteableBitmap **, 맞죠? –

답변

3

WriteableBitmap 이미지를 정의 할 때 pixelWidth 및 pixelHeight 상관 없어,이 시도하십시오

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에 삽입하여 corr을 채 웁니다. 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 응용 프로그램의 경우)

관련 문제