당신은 BitmapImage
에서 비트 맵을 추출 할 수 없습니다. BitmapImage
을 파일로 직접 저장할 방법이 없습니다. 유일한 방법은 원본 소스를 기억하고 저장하는 것입니다. 파일에 BitmapImage
저장에 대한 자세한 내용은 this thread을 참조하십시오. 원본 소스는, 예를 들어, 당신이 FileOpenPicker
고른 파일에서 BitmapImage
을 읽어 알고 있다면
, 당신은, 당신이 PixelBuffer
을 추출 할 수있는 WriteableBitmap
에 이미지 파일을 읽기 BitmapEncoder
로 인코딩, 수 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();
}
}
이미지 목록은 하나씩 저장해야 할 수 있습니다.
"작동하지 않음"- 어떤 오류가 발생합니까? –
친절하게 편집 된 질문을 참조하십시오. – cykopath