You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.3 KiB
64 lines
2.3 KiB
using AVFoundation;
|
|
using CoreGraphics;
|
|
using CoreMedia;
|
|
using CoreVideo;
|
|
using SkiaSharp.Views.iOS;
|
|
using System;
|
|
using System.IO;
|
|
using UIKit;
|
|
|
|
namespace Demo.iOS.Controls
|
|
{
|
|
public class SampleBufferDelegate : AVCaptureVideoDataOutputSampleBufferDelegate
|
|
{
|
|
public override void DidOutputSampleBuffer(AVCaptureOutput captureOutput, CMSampleBuffer sampleBuffer, AVCaptureConnection connection)
|
|
{
|
|
try
|
|
{
|
|
using (var pixelBuffer = sampleBuffer.GetImageBuffer() as CVPixelBuffer)
|
|
{
|
|
pixelBuffer.Lock(CVPixelBufferLock.None);
|
|
var flags = CGBitmapFlags.PremultipliedFirst | CGBitmapFlags.ByteOrder32Little;
|
|
using (var cs = CGColorSpace.CreateDeviceRGB())
|
|
{
|
|
using (var context = new CGBitmapContext(pixelBuffer.BaseAddress,
|
|
pixelBuffer.Width,
|
|
pixelBuffer.Height,
|
|
8,
|
|
pixelBuffer.BytesPerRow,
|
|
cs,
|
|
(CGImageAlphaInfo)flags))
|
|
{
|
|
using (var cgImage = context.ToImage())
|
|
{
|
|
pixelBuffer.Unlock(CVPixelBufferLock.None);
|
|
var uiImage = UIImage.FromImage(cgImage);
|
|
using (var stream = new MemoryStream())
|
|
{
|
|
uiImage.AsJPEG().AsStream().CopyTo(stream);
|
|
var jpegBytes = stream.ToArray();
|
|
var skBitmap = cgImage.ToSKBitmap();
|
|
var base64 = Convert.ToBase64String(jpegBytes);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ex.ToString();
|
|
}
|
|
finally
|
|
{
|
|
try
|
|
{
|
|
sampleBuffer.Dispose();
|
|
}
|
|
catch
|
|
{
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |