Xamarin.forms Xamarin forms UWP:如何从ImageSource保存jpg?
我可以在iOS和Android中保存图片,但我找不到在UWP中保存图片的方法。有什么想法吗Xamarin.forms Xamarin forms UWP:如何从ImageSource保存jpg?,xamarin.forms,uwp,Xamarin.forms,Uwp,我可以在iOS和Android中保存图片,但我找不到在UWP中保存图片的方法。有什么想法吗 提前谢谢。也许有人需要iOS和Android的解决方案(见下文)。与此同时,我正在等待UWP的想法 网间网操作系统 // ///将图片保存到磁盘。 /// ///将图片复制到磁盘。 ///图像源。 ///标识符。 ///如果设置为true,则覆盖(如果存在)。 ///将图片复制到磁盘。 公共异步void SaveImage(ImageSource imgSrc,字符串id,bool overwriteI
提前谢谢。也许有人需要iOS和Android的解决方案(见下文)。与此同时,我正在等待UWP的想法 网间网操作系统
//
///将图片保存到磁盘。
///
///将图片复制到磁盘。
///图像源。
///标识符。
///如果设置为true,则覆盖(如果存在)。
///将图片复制到磁盘。
公共异步void SaveImage(ImageSource imgSrc,字符串id,bool overwriteIfExist=false)
{
var renderer=new StreamImagesourceHandler();
var photo=await renderer.LoadImageAsync(imgSrc);
字符串jpgFilename=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),id+“.jpg”);
if(File.Exists(jpgFilename))
{
文件.Delete(jpgFilename);
}
NSData imgData=photo.AsJPEG();
错误;
if(imgData.Save(jpgFilename、false、out err))
{
Console.WriteLine(“另存为”+jpgFilename);
}
其他的
{
Console.WriteLine(“未另存为”+jpgFilename
+“因为”+错误本地化描述);
}
}
很高兴知道,当iOS将图像保存为jpg时,图像标题会显示png
安卓
//
///将图片保存到磁盘。
///
///图像源。
///图像标识符。
///如果设置为true,则覆盖(如果存在)。
///将图片复制到磁盘。
公共异步void SaveImage(ImageSource imgSrc,字符串id,
bool overwriteIfExist=false)
{
var renderer=new StreamImagesourceHandler();
var photo=await renderer.LoadImageAsync(imgSrc,Forms.Context);
字符串jpgFilename=System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),id+“.jpg”);
if(File.Exists(jpgFilename))
{
文件.Delete(jpgFilename);
}
使用(FileStream fs=newfilestream(jpgFilename,FileMode.OpenOrCreate))
{
photo.Compress(位图.CompressFormat.Jpeg,100,fs);
}
}
也许有人需要iOS和Android的解决方案(见下文)。与此同时,我正在等待UWP的想法
网间网操作系统
//
///将图片保存到磁盘。
///
///将图片复制到磁盘。
///图像源。
///标识符。
///如果设置为true,则覆盖(如果存在)。
///将图片复制到磁盘。
公共异步void SaveImage(ImageSource imgSrc,字符串id,bool overwriteIfExist=false)
{
var renderer=new StreamImagesourceHandler();
var photo=await renderer.LoadImageAsync(imgSrc);
字符串jpgFilename=Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),id+“.jpg”);
if(File.Exists(jpgFilename))
{
文件.Delete(jpgFilename);
}
NSData imgData=photo.AsJPEG();
错误;
if(imgData.Save(jpgFilename、false、out err))
{
Console.WriteLine(“另存为”+jpgFilename);
}
其他的
{
Console.WriteLine(“未另存为”+jpgFilename
+“因为”+错误本地化描述);
}
}
很高兴知道,当iOS将图像保存为jpg时,图像标题会显示png
安卓
//
///将图片保存到磁盘。
///
///图像源。
///图像标识符。
///如果设置为true,则覆盖(如果存在)。
///将图片复制到磁盘。
公共异步void SaveImage(ImageSource imgSrc,字符串id,
bool overwriteIfExist=false)
{
var renderer=new StreamImagesourceHandler();
var photo=await renderer.LoadImageAsync(imgSrc,Forms.Context);
字符串jpgFilename=System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),id+“.jpg”);
if(File.Exists(jpgFilename))
{
文件.Delete(jpgFilename);
}
使用(FileStream fs=newfilestream(jpgFilename,FileMode.OpenOrCreate))
{
photo.Compress(位图.CompressFormat.Jpeg,100,fs);
}
}
我找不到在UWP中保存图像的方法
不,我们无法从Xamarin对象提取图像数据
UWP中有StreamImagesourceHandler
类实现,请参阅
在Xamarin页面的代码隐藏中:
var memoryStream = new MemoryStream(Convert.FromBase64String("iVBOxxxxxxxxxxMVEX/uQOAuwPzUxxxxxxxxxxxx="));
ImageSource imgsource = ImageSource.FromStream(() => memoryStream);
if (Device.OS == TargetPlatform.Windows|| Device.OS == TargetPlatform.WinPhone)
DependencyService.Get<ISaveImage>().SavePictureToDiskWINRT(memoryStream, "1");
else
DependencyService.Get<ISaveImage>().SavePictureToDisk(imgsource, "1");
请在
关于UWP文件存储指南,请参阅
我找不到在UWP中保存图像的方法
不,我们无法从Xamarin对象提取图像数据
UWP中有StreamImagesourceHandler
类实现,请参阅
在Xamarin页面的代码隐藏中:
var memoryStream = new MemoryStream(Convert.FromBase64String("iVBOxxxxxxxxxxMVEX/uQOAuwPzUxxxxxxxxxxxx="));
ImageSource imgsource = ImageSource.FromStream(() => memoryStream);
if (Device.OS == TargetPlatform.Windows|| Device.OS == TargetPlatform.WinPhone)
DependencyService.Get<ISaveImage>().SavePictureToDiskWINRT(memoryStream, "1");
else
DependencyService.Get<ISaveImage>().SavePictureToDisk(imgsource, "1");
请在
关于UWP文件存储指南,请参见到目前为止您尝试了什么?你有密码吗?iOS和Android的代码是什么样子的?对于iOS和Android来说,工作正常。在UWP不工作的情况下,一些在线教程是错误的或不完整的。我可以分享我的代码。请分享一些代码,也许它会给我一些关于你的要求的提示,以及你是如何在iOS和Android中解决的。请使用您正在遵循的代码和/或教程更新您的问题。据我所知,如果您想保存文件,您需要从原始源获取流/字节数组,但xamarin的
ImageSource
没有此类方法,我们需要保留对原始源的引用。那么你在IOS和Android中是如何做到的呢?你的图像来源是什么?到目前为止你尝试了什么?你有密码吗?iOS和Android的代码是什么样子的?对于iOS和Android来说,工作正常。在UWP不工作的情况下,一些在线教程是错误的或不完整的。我可以分享我的代码。请分享一些代码,也许我可以
public sealed class StreamImageSourceHandler : IImageSourceHandler
{
public async Task<Windows.UI.Xaml.Media.ImageSource> LoadImageAsync(ImageSource imagesource, CancellationToken cancellationToken = new CancellationToken())
{
BitmapImage bitmapimage = null;
//Omitted
return bitmapimage;
}
}
public interface ISaveImage
{
void SavePictureToDisk(ImageSource imgSrc, string Id, bool OverwriteIfExist = false);
void SavePictureToDiskWINRT(System.IO.Stream imgStream, string Id, bool OverwriteIfExist = false);
}
var memoryStream = new MemoryStream(Convert.FromBase64String("iVBOxxxxxxxxxxMVEX/uQOAuwPzUxxxxxxxxxxxx="));
ImageSource imgsource = ImageSource.FromStream(() => memoryStream);
if (Device.OS == TargetPlatform.Windows|| Device.OS == TargetPlatform.WinPhone)
DependencyService.Get<ISaveImage>().SavePictureToDiskWINRT(memoryStream, "1");
else
DependencyService.Get<ISaveImage>().SavePictureToDisk(imgsource, "1");
using Xamarin.Forms;
using WorkingWithImages.WinUniversal;
using System.IO;
using System;
using Windows.Storage.Streams;
[assembly: Xamarin.Forms.Dependency(typeof(SaveImageImplementation))]
namespace WorkingWithImages.WinUniversal
{
public class SaveImageImplementation : ISaveImage
{
public SaveImageImplementation() { }
public void SavePictureToDisk(ImageSource imgSrc, string Id, bool OverwriteIfExist = false)
{
throw new NotImplementedException();
}
public async void SavePictureToDiskWINRT(Stream imgStream, string Id, bool OverwriteIfExist = false)
{
var inStream = imgStream.AsRandomAccessStream();
var fileBytes = new byte[inStream.Size];
using (DataReader reader = new DataReader(inStream))
{
await reader.LoadAsync((uint)inStream.Size);
reader.ReadBytes(fileBytes);
}
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync(Id+".jpg", Windows.Storage.CreationCollisionOption.ReplaceExisting);
using (var fs = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
{
var outStream = fs.GetOutputStreamAt(0);
var dataWriter = new DataWriter(outStream);
dataWriter.WriteBytes(fileBytes);
await dataWriter.StoreAsync();
dataWriter.DetachStream();
await outStream.FlushAsync();
outStream.Dispose();
fs.Dispose();
}
}
}
}