如何将 Forms.Image 中的最终照片保存到 xamarin 表单中的本地
Posted
技术标签:
【中文标题】如何将 Forms.Image 中的最终照片保存到 xamarin 表单中的本地【英文标题】:How to save the final photo in Forms.Image to local in xamarin forms 【发布时间】:2019-02-17 04:34:40 【问题描述】:我正在使用 Xamarin 表单为 android 制作一个应用程序,用户可以从他们的库中选择一张照片,添加一个白色边框使其成为正方形,然后保存它。我卡在保存部分,无法弄清楚
我使用的是普通的 Xamarin.Forms.Image 控件
<Image HorizontalOptions="CenterAndExpand"
VerticalOptions="Center"
BackgroundColor="Transparent"
Grid.Column="0"
Grid.Row="0"
x:Name="imgViewer"/>
这就是我选择照片的方式
async void tbAdd_Activated(object sender, System.EventArgs e)
var file = await CrossFilePicker.Current.PickFile();
if (file != null)
imgViewer.Source = ImageSource.FromFile(file.FilePath);
imgViewer.BackgroundColor = Color.White;
但是我有一个保存按钮,可以将带有边框的最终图像保存到相机胶卷,但我不知道如何保存它,我到处搜索,但似乎找不到!
有人知道怎么做吗?
【问题讨论】:
如果您想处理图像,请查看 SkiaSharp。 我已经发布了一个答案并测试了它。请尝试一下。 【参考方案1】:您必须在 ios 和 android 中使用特定代码来保存图像,并通过将此密钥添加到 info.Plist 文件来在 iOS 中添加所需的权限
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME)</string>
安卓:
MediaStore.Images.Media.InsertImage(Application.Context.ContentResolver, [YourFileName],
System.IO.Path.GetFileName([YourFileName]), string.Empty);
iOS:
var imageSource = CGImageSource.FromUrl(NSUrl.FromFilename( [YourFileName]));
UIImage.FromImage(imageSource.CreateImage(0, null), 1, imageOrientation)
.SaveToPhotosAlbum((image, error) => // handle success & error here... );
您可以查看此link 了解更多信息。
【讨论】:
【参考方案2】:可以通过以下代码保存图片:
void save_Activated(object sender, System.EventArgs e)
if (file != null)
byte[] imageBytes;
var FileImage = new Image();
string base64;
using (var fs = new FileStream(file.FilePath, FileMode.Open, FileAccess.Read))
var buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
base64 = Convert.ToBase64String(buffer);
imageBytes = Convert.FromBase64String(base64);
File.WriteAllBytes(filename, imageBytes);
所以完整的代码是这样的:
string documentsFolder;
string filename;
FileData file;
ImageSource imageSource;
public MainPage()
InitializeComponent();
documentsFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
filename = Path.Combine(documentsFolder, "myfile.jpg");
async void tbAdd_Activated(object sender, System.EventArgs e)
file = await CrossFilePicker.Current.PickFile();
if (file != null)
imgViewer.Source = ImageSource.FromFile(file.FilePath);
imgViewer.BackgroundColor = Color.White;
imageSource = imgViewer.Source;
void save_Activated(object sender, System.EventArgs e)
if (file != null)
byte[] imageBytes;
var FileImage = new Image();
string base64;
using (var fs = new FileStream(file.FilePath, FileMode.Open, FileAccess.Read))
var buffer = new byte[fs.Length];
fs.Read(buffer, 0, (int)fs.Length);
base64 = Convert.ToBase64String(buffer);
imageBytes = Convert.FromBase64String(base64);
File.WriteAllBytes(filename, imageBytes);
xamal 是:
<Button Text="AddImage" Clicked="tbAdd_Activated">
</Button>
<Button Text="SaveImage" Clicked="save_Activated">
</Button>
<Image HorizontalOptions="CenterAndExpand"
VerticalOptions="Center"
BackgroundColor="Transparent"
Grid.Column="0"
Grid.Row="0"
x:Name="imgViewer"/>
【讨论】:
以上是关于如何将 Forms.Image 中的最终照片保存到 xamarin 表单中的本地的主要内容,如果未能解决你的问题,请参考以下文章