diff --git a/projects/Demo/Demo.iOS/AppDelegate.cs b/projects/Demo/Demo.iOS/AppDelegate.cs index bfe860cd..c4b44e89 100644 --- a/projects/Demo/Demo.iOS/AppDelegate.cs +++ b/projects/Demo/Demo.iOS/AppDelegate.cs @@ -13,9 +13,9 @@ namespace Demo.iOS this.Notification(); LibVLCSharpFormsRenderer.Init(); ZXing.Net.Mobile.Forms.iOS.Platform.Init(); - CameraPreview.iOS.CameraPreviewSettings.Instance.Init(new IosDecoder()); global::Xamarin.Forms.Forms.Init(); LoadApplication(new App()); + CameraPreview.iOS.CameraPreviewSettings.Instance.Init(new IosDecoder()); return base.FinishedLaunching(app, options); } diff --git a/projects/Demo/Demo.iOS/Demo.iOS.csproj b/projects/Demo/Demo.iOS/Demo.iOS.csproj index 277d8c59..10b1407e 100644 --- a/projects/Demo/Demo.iOS/Demo.iOS.csproj +++ b/projects/Demo/Demo.iOS/Demo.iOS.csproj @@ -59,6 +59,7 @@ false + true none @@ -162,10 +163,6 @@ - - False - C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Drawing.dll - diff --git a/projects/Demo/Demo.iOS/IosDecoder.cs b/projects/Demo/Demo.iOS/IosDecoder.cs index 83eb8a2d..7672d6d2 100644 --- a/projects/Demo/Demo.iOS/IosDecoder.cs +++ b/projects/Demo/Demo.iOS/IosDecoder.cs @@ -1,10 +1,9 @@ using CameraPreview; using CameraPreview.iOS; +using CoreGraphics; using CoreVideo; -using System.Drawing; -using System.Drawing.Imaging; using System.IO; -using ZXing.Mobile; +using UIKit; namespace Demo.iOS { @@ -14,47 +13,31 @@ namespace Demo.iOS public override IScanResult Decode(CVPixelBuffer pixelBuffer) { - unsafe + pixelBuffer.Lock(CVPixelBufferLock.None); + var flags = CGBitmapFlags.PremultipliedFirst | CGBitmapFlags.ByteOrder32Little; + using (var cs = CGColorSpace.CreateDeviceRGB()) { - var rawData = (byte*)pixelBuffer.BaseAddress.ToPointer(); - int rawDatalen = (int)(pixelBuffer.Height * pixelBuffer.Width * 4); - int width = (int)pixelBuffer.Width; - int height = (int)pixelBuffer.Height; - var luminanceSource = new CVPixelBufferBGRA32LuminanceSource(rawData, rawDatalen, width, height); - using (Bitmap image = new Bitmap(luminanceSource.Width, luminanceSource.Height)) + using (var context = new CGBitmapContext(pixelBuffer.BaseAddress, + pixelBuffer.Width, + pixelBuffer.Height, + 8, + pixelBuffer.BytesPerRow, + cs, + (CGImageAlphaInfo)flags)) { - for (int r = 0; r < height; r++) + using (var cgImage = context.ToImage()) { - for (int c = 0; c < width; c++) + pixelBuffer.Unlock(CVPixelBufferLock.None); + var uiImage = UIImage.FromImage(cgImage); + using (var stream = new MemoryStream()) { - var value = luminanceSource.Matrix[r * width + c]; - image.SetPixel(c, r, Color.FromArgb(value, value, value)); + uiImage.AsJPEG().AsStream().CopyTo(stream); + this._faceDecoder.Decode(stream.ToArray()); } } - using (var stream = new MemoryStream()) - { - var @params = new EncoderParameters(1); - @params.Param[0] = new EncoderParameter(Encoder.Quality, 100L); - image.Save(stream, GetEncoderInfo("image/jpeg"), @params); - this._faceDecoder.Decode(stream.ToArray()); - } - this._faceDecoder.Decode(luminanceSource.Matrix); } } return base.Decode(pixelBuffer); } - - private static ImageCodecInfo GetEncoderInfo(string mimeType) - { - int j; - ImageCodecInfo[] encoders; - encoders = ImageCodecInfo.GetImageEncoders(); - for (j = 0; j < encoders.Length; ++j) - { - if (encoders[j].MimeType == mimeType) - return encoders[j]; - } - return null; - } } } \ No newline at end of file diff --git a/projects/Demo/Demo/FaceDecoder.cs b/projects/Demo/Demo/FaceDecoder.cs index 9a73bb67..2e6c0d7e 100644 --- a/projects/Demo/Demo/FaceDecoder.cs +++ b/projects/Demo/Demo/FaceDecoder.cs @@ -6,7 +6,6 @@ namespace Demo { public void Decode(byte[] image) { - //Console.WriteLine(BitConverter.ToString(image).Replace("-", "")); var base64 = Convert.ToBase64String(image); //Console.WriteLine(); }