我有一个图像SurfaceImageSource,我会将其转换为PNG。 我试着用这个项目: link
我尝试使用SharpDX库,但我没有成功。
private void initialize()
{
StorageFolder folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync("folder", CreationCollisionOption.OpenIfExists);
StorageFile imagePng = await folder.CreateFileAsync("file.png", CreationCollisionOption.ReplaceExisting);
if (imagePng != null)
{
//surfaceImageSource to PNG method
surfaceToPng(surfaceImage,imagePng);
}
}
private void surfaceToPng(SurfaceImageSource surface,StorageFile imagePng){
IRandomAccessStream stream = await imagePng.OpenAsync(FileAccessMode.ReadWrite);
//.....//
}
答案 0 :(得分:1)
您链接的sample是关于“如何将SurfaceImageSource目标保存为通用应用中的图像”,这正是您想要的。它创建一个名为“MyImageSourceComponent”的C ++ Windows Runtime Component并提供一个名为“MyImageSource”的密封类,其中包含方法public void SaveSurfaceImageToFile(IRandomAccessStream randomAccessStream);
您可以调用此方法将SurfaceImageSource保存到png。
uint imageWidth;
uint imageHeight;
MyImageSource myImageSource;
public MainPage()
{
this.InitializeComponent();
imageWidth = (uint)this.MyImage.Width;
imageHeight = (uint)this.MyImage.Height;
myImageSource = new MyImageSource(imageWidth, imageHeight, true);
this.MyImage.Source = myImageSource;
}
private async void btnSave_Click(object sender, RoutedEventArgs e)
{
FileSavePicker savePicker = new FileSavePicker();
savePicker.FileTypeChoices.Add("Png file", new List<string>() { ".png" });
savePicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite);
myImageSource.SaveSurfaceImageToFile(stream);
}
}
虽然此示例适用于Windows 8.1,但它也应该能够与uwp应用程序一起使用。我帮助将示例转换为您可以参考的uwp app here。我创建了一个带有Windows运行时组件的新uwp应用程序,并引用了示例中“MyImageSouceComponent”的代码。然后添加运行时组件作为uwp项目的引用。最后使用上面的代码调用SaveSurfaceImageToFile
方法。