Uro*_*ros 4 xamarin.ios xamarin
我有Xamarin Forms解决方案,并且在iOS项目中,我想将Stream中的图像转换为UIImage。我通过以下代码获得了Stream:
var _captureSession = new AVCaptureSession();
var _captureDevice = AVCaptureDevice.GetDefaultDevice(AVMediaType.Video);
var output = new AVCaptureStillImageOutput { OutputSettings = new NSDictionary(AVVideo.CodecKey, AVVideo.CodecJPEG) };
NSError error;
_captureSession.AddInput(new AVCaptureDeviceInput(_captureDevice, out error));
_captureSession.AddOutput(output);
_captureSession.StartRunning();
var buffer = await output.CaptureStillImageTaskAsync(output.Connections[0]);
NSData data = AVCaptureStillImageOutput.JpegStillToNSData(buffer);
Stream stream = data.AsStream();
Run Code Online (Sandbox Code Playgroud)
我需要UIImage以便使用以下代码旋转它:
public UIImage RotateImage(UIImage image)
{
CGImage imgRef = image.CGImage;
float width = imgRef.Width;
float height = imgRef.Height;
CGAffineTransform transform = CGAffineTransform.MakeIdentity();
RectangleF bounds = new RectangleF(0, 0, width, height);
float scaleRatio = bounds.Size.Width / width;
SizeF imageSize = new SizeF(imgRef.Width, imgRef.Height);
UIImageOrientation orient = image.Orientation;
float boundHeight;
if (width > height)
{
boundHeight = bounds.Size.Height;
bounds.Size = new SizeF(boundHeight, bounds.Size.Width);
transform = CGAffineTransform.MakeTranslation(imageSize.Height, 0);
transform = CGAffineTransform.Rotate(transform, (float)Math.PI / 2.0f);
}
UIGraphics.BeginImageContext(bounds.Size);
CGContext context = UIGraphics.GetCurrentContext();
context.ScaleCTM(-scaleRatio, scaleRatio);
context.TranslateCTM(-height, 0);
context.ConcatCTM(transform);
context.DrawImage(new RectangleF(0, 0, width, height), imgRef);
UIImage imageCopy = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return imageCopy;
}
Run Code Online (Sandbox Code Playgroud)
如何将Stream转换为UIImage?
您需要NSData先将流转换成隐蔽格式,然后才能将其转换成UIImage。
var imageData = NSData.FromStream(stream);
var image = UIImage.LoadFromData(imageData);
Run Code Online (Sandbox Code Playgroud)
两者都是,IDisposable因此您可以using根据自己的情况使用语句。如果不使用using语句,请确保手动处理内存中的图像对象。
| 归档时间: |
|
| 查看次数: |
2057 次 |
| 最近记录: |