我正在研究xamarin ios。我必须在iPhone应用程序中实现相机功能。我已经实现了代码。但问题是,当我尝试使用webservices上传图片时,由于图片的大小,它无法上传。
所以我试图缩放图片的大小,但在这种情况下,图像看起来是拉伸的。我希望该图像应该以相同的尺寸上传,可能质量最差,但高度和宽度应该是原始的。
以下是我实施的代码:
Camera.TakePicture(this, (obj) =>
{
var photo = obj.ValueForKey(new NSString("UIImagePickerControllerOriginalImage")) as UIImage;
var image = photo.Scale(new CGSize(1280, 720));
Byte[] myByteArray;
using (NSData imageData = image.AsJPEG(0.0f))
{
myByteArray = new Byte[imageData.Length];
System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, myByteArray, 0, Convert.ToInt32(imageData.Length));
}
});
答案 0 :(得分:2)
不要执行缩放操作
var image = photo.Scale(new CGSize(1280,720));
如果你不想改变大小。如果您确实想要调整大小并保持宽高比,则此代码应该执行此操作
// Resize the image to be contained within a maximum width and height, keeping aspect ratio
public UIImage MaxResizeImage (UIImage sourceImage, float maxWidth, float maxHeight)
{
var sourceSize = sourceImage.Size;
var maxResizeFactor = Math.Max (maxWidth / sourceSize.Width, maxHeight / sourceSize.Height);
if (maxResizeFactor > 1) return sourceImage;
var width = maxResizeFactor * sourceSize.Width;
var height = maxResizeFactor * sourceSize.Height;
UIGraphics.BeginImageContext (new SizeF ((float)width, (float)height));
sourceImage.Draw (new RectangleF (0, 0, (float)width, (float)height));
var resultImage = UIGraphics.GetImageFromCurrentImageContext ();
UIGraphics.EndImageContext ();
return resultImage;
}
如何在您的代码上使用
Camera.TakePicture(this, (obj) =>
{
var photo = obj.ValueForKey(new NSString("UIImagePickerControllerOriginalImage")) as UIImage;
var image = MaxResizeImage (photo,1280, 720);
Byte[] myByteArray;
using (NSData imageData = image.AsJPEG(0.0f))
{
myByteArray = new Byte[imageData.Length];
System.Runtime.InteropServices.Marshal.Copy(imageData.Bytes, myByteArray, 0, Convert.ToInt32(imageData.Length));
}
});