あなたはBitmapImage
からビットマップを抽出することはできません。 BitmapImage
を直接ファイルに保存する方法はありません。唯一の方法は、元のソースを覚えて、それを保存することです。ファイルへのBitmapImage
の保存の詳細については、this threadを参照してください。
あなたは元のソースを知っている場合、たとえば、あなたがFileOpenPicker
が選んだファイルからBitmapImage
を読んで、あなたはWriteableBitmap
に画像ファイルを読み込むことができ、あなたはBitmapEncoder
でそれをエンコード、PixelBuffer
を抽出することができ、かつRobによると、得られたストリームをStorageFile
に保存します。サンプルコードは次のとおりです。
private async void btncreate_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openpicker = new FileOpenPicker();
openpicker.FileTypeFilter.Add(".jpg");
openpicker.FileTypeFilter.Add(".png");
StorageFile originalimage = await openpicker.PickSingleFileAsync();
WriteableBitmap writeableimage1;
using (IRandomAccessStream stream = await originalimage.OpenAsync(FileAccessMode.Read))
{
SoftwareBitmap softwareBitmap;
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
softwareBitmap = await decoder.GetSoftwareBitmapAsync();
writeableimage1 = new WriteableBitmap(softwareBitmap.PixelWidth, softwareBitmap.PixelHeight);
writeableimage1.SetSource(stream);
}
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile newimage = await folder.CreateFileAsync(originalimage.Name, CreationCollisionOption.ReplaceExisting);
using (IRandomAccessStream ras = await newimage.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapEncoder encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, ras);
var stream = writeableimage1.PixelBuffer.AsStream();
byte[] buffer = new byte[stream.Length];
await stream.ReadAsync(buffer, 0, buffer.Length);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, (uint)writeableimage1.PixelWidth, (uint)writeableimage1.PixelHeight, 96.0, 96.0, buffer);
await encoder.FlushAsync();
}
}
画像の一覧は、1つずつ保存する必要があります。
「これは動作しません」 - 何のエラーが表示されていますか? –
編集した質問を教えてください。ありがとう – cykopath