我需要在Parse保存图像,所以我需要将其转换为byte []。知道我怎么能实现这个目标?我已经搜索过了,但没有一个选项适合我。我正在使用共享的Xamarin Forms项目。这是一个带文字的例子:
byte[] data = System.Text.Encoding.UTF8.GetBytes("Working at Parse is great!");
ParseFile file = new ParseFile("resume.txt", data);
我是初学者,我真的需要帮助!
[编辑]: 出于某种原因,Xamarin不会让我使用" System.Drawing.Image"。 我搜索了很多,但我找到了这个,但我无法让它发挥作用:
public static byte[] ReadFully(System.IO.Stream input)
{
using (var ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
提前致谢。
答案 0 :(得分:0)
以下是将BitmapImage转换为byte []的一些代码:
public byte[] ConvertToBytes(BitmapImage bitmapImage)
{
if (bitmapImage != null)
{
MemoryStream memStream = new MemoryStream();
JpegBitmapEncoder encoder = new JpegBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
encoder.Save(memStream);
return memStream.GetBuffer();
}
return null;
}
以下是将byte []转换为BitmapImage的一些代码:
private void LoadImage()
{
var image = Services.GetImage(_employeeID);
if (image.Image != null)
{
MemoryStream strmImg = new MemoryStream(image.Image);
BitmapImage myBitmapImage = new BitmapImage();
myBitmapImage.BeginInit();
myBitmapImage.StreamSource = strmImg;
myBitmapImage.DecodePixelWidth = 200;
myBitmapImage.DecodePixelWidth = 250;
myBitmapImage.EndInit();
this.DemographicInformation.Image = myBitmapImage;
}
}
这对我很有用。
答案 1 :(得分:0)
如果您从相册中选择图像,则可以使用此代码。该代码还旨在从iOS的照片库中拾取图像,并将其作为字节数组保存到数据库中。
您说您已经有一个要显示为登录表单的图像,但是看到此图像的人可能不知道如何从iOS的照片库中获取图像,因此我编写了所有代码以存档获取图像的方式。图像并将其转换为字节数组。我使用Prism库,但是任何框架都可以。
如果您只想知道如何在Xamarin.forms中将图像转换为字节数组,则可以转到下面的代码底部作为MainPage类。
首先,创建一个新文件夹并将其命名为Services。在此文件夹下,您将像这样创建一个界面。
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
using System.IO;
using Foundation;
namespace TestUIImage.Services
{
public interface IPicturePicker
{
Task<NSUrl> GetNSUrlAsync();
}
}
然后,编写GetNSUrlAsync方法的内容。 您需要两种方法GetNSUrl和OnImagePickerCancelled,以便用户选择图像或取消选择。
using System;
using System.IO;
using UIKit;
using Xamarin.Forms;
using System.Threading.Tasks;
using Foundation;
namespace TestUIImage.Services
{
public class PicturePickerImplementation : IPicturePicker
{
public PicturePickerImplementation()
{
}
TaskCompletionSource<NSUrl> urltaskCompletionSource;
UIImagePickerController imagePicker;
public Task<NSUrl> GetNSUrlAsync()
{
// Create and define UIImagePickerController
imagePicker = new UIImagePickerController
{
SourceType = UIImagePickerControllerSourceType.PhotoLibrary,
MediaTypes = UIImagePickerController.AvailableMediaTypes(UIImagePickerControllerSourceType.PhotoLibrary)
};
// Set event handlers
imagePicker.FinishedPickingMedia += GetNSUrl;
imagePicker.Canceled += OnImagePickerCancelled;
// Present UIImagePickerController
UIWindow window = UIApplication.SharedApplication.KeyWindow;
var viewController = window.RootViewController;
viewController.PresentModalViewController(imagePicker, true);
// Return Task object
urltaskCompletionSource = new TaskCompletionSource<NSUrl>();
return urltaskCompletionSource.Task;
}
void GetNSUrl(object sender, UIImagePickerMediaPickedEventArgs args)
{
urltaskCompletionSource.SetResult(args.ImageUrl);
imagePicker.DismissModalViewController(true);
}
void OnImagePickerCancelled(object sender, EventArgs args)
{
taskCompletionSource.SetResult(null);
imagePicker.DismissModalViewController(true);
}
}
}
接下来,您将使用DependencyService注册服务,因为从iOS的图片库中选择图像取决于您的平台。
using Prism;
using Prism.Ioc;
using TestUIImage.ViewModels;
using TestUIImage.Views;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
using Prism.Autofac;
using TestUIImage.Services;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace TestUIImage
{
public partial class App : PrismApplication
{
public App() : this(null) { }
public App(IPlatformInitializer initializer) : base(initializer) { }
protected override async void OnInitialized()
{
InitializeComponent();
DependencyService.Register<PicturePickerImplementation>();
await NavigationService.NavigateAsync("NavigationPage/MainPage");
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<NavigationPage>();
containerRegistry.RegisterForNavigation<MainPage>();
}
}
}
然后,由于iOS的安全性,您将此代码添加到Info.plist中。
...
<key>NSPhotoLibraryUsageDescription</key>
<string>Picture Picker uses photo library</string>
</dict>
</plist>
最后,您可以在代码隐藏中调用服务。这一次,我将Image控制器用作TestImage,将Button控制器用作PickPictureButton。
using System;
using System.IO;
using System.Drawing;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Foundation;
using Xamarin.Forms;
using TestUIImage.Services;
namespace TestUIImage.Views
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
async void Handle_Clicked(object sender, System.EventArgs e)
{
PickPictureButton.IsEnabled = false;
NSUrl nSUrl = await DependencyService.Get<IPicturePicker>().GetNSUrlAsync();
TestImage.Source = ImageSource.FromStream(() =>
{
var ms = new MemoryStream();
var imagebytes = File.ReadAllBytes(nSUrl.Path);
ms.Write(imagebytes, 0, imagebytes.Length);
ms.Seek(0, SeekOrigin.Begin);
return ms;
});
PickPictureButton.IsEnabled = true;
}
}
}