2

ローカルディスクから書き込み可能なビットマップイメージにイメージファイルをロードして、ユーザーが編集できるようにしたい。WriteableBitmapオブジェクトを作成するとき、コンストラクターにはpixelwidthパラメーターとpixelheightパラメーターが必要です。これら2つをどこで取得するかわかりませんが、誰か助けてくれますか?

4

3 に答える 3

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();
于 2013-01-16T08:09:33.730 に答える
3

WriteableBitmapイメージを定義するときは、pixelWidthとpixelHeightを気にしないでください。次のことを試してください。

using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
    WriteableBitmap image = new WriteableBitmap(1, 1);
    image.SetSource(stream);
    WriteableBitmapImage.Source = image;
}
于 2013-01-16T15:56:27.103 に答える
3

正しいピクセル幅と高さを取得したい場合は、最初にそれをBitmapImageにロードして、正しく入力する必要があります。

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アプリの場合)

于 2014-12-03T00:09:14.360 に答える