public void Present() { _bitmap.LockPixels(); IntPtr length; var pixels = _bitmap.GetPixels(out length); #if __IOS__ const int bitmapInfo = ((int)CGBitmapFlags.ByteOrder32Big) | ((int)CGImageAlphaInfo.PremultipliedLast); var bounds = GetApplicationFrame(); var statusBarOffset = UIScreen.MainScreen.Bounds.Height - bounds.Height; using (var colorSpace = CGColorSpace.CreateDeviceRGB()) using (var bContext = new CGBitmapContext(pixels, _bitmap.Width, _bitmap.Height, 8, _bitmap.Width * 4, colorSpace, (CGImageAlphaInfo)bitmapInfo)) using (var image = bContext.ToImage()) using (var context = UIGraphics.GetCurrentContext()) { // flip the image for CGContext.DrawImage context.TranslateCTM(0, bounds.Height + statusBarOffset); context.ScaleCTM(1, -1); context.DrawImage(bounds, image); } #elif WIN32 UnmanagedMethods.BITMAPINFO bmi = new UnmanagedMethods.BITMAPINFO(); bmi.biSize = UnmanagedMethods.SizeOf_BITMAPINFOHEADER; bmi.biWidth = _bitmap.Width; bmi.biHeight = -_bitmap.Height; // top-down image bmi.biPlanes = 1; bmi.biBitCount = 32; bmi.biCompression = (uint)UnmanagedMethods.BitmapCompressionMode.BI_RGB; bmi.biSizeImage = 0; IntPtr hdc = UnmanagedMethods.GetDC(_hwnd); int ret = UnmanagedMethods.SetDIBitsToDevice(hdc, 0, 0, (uint)_bitmap.Width, (uint)_bitmap.Height, 0, 0, 0, (uint)_bitmap.Height, pixels, ref bmi, (uint)UnmanagedMethods.DIBColorTable.DIB_RGB_COLORS); UnmanagedMethods.ReleaseDC(_hwnd, hdc); #endif _bitmap.UnlockPixels(); }
public void Present() { _bitmap.LockPixels(); IntPtr length; var pixels = _bitmap.GetPixels(out length); #if WIN32 UnmanagedMethods.BITMAPINFO bmi = new UnmanagedMethods.BITMAPINFO(); bmi.biSize = UnmanagedMethods.SizeOf_BITMAPINFOHEADER; bmi.biWidth = _bitmap.Width; bmi.biHeight = -_bitmap.Height; // top-down image bmi.biPlanes = 1; bmi.biBitCount = 32; bmi.biCompression = (uint)UnmanagedMethods.BitmapCompressionMode.BI_RGB; bmi.biSizeImage = 0; IntPtr hdc = UnmanagedMethods.GetDC(_hwnd.Handle); int ret = UnmanagedMethods.SetDIBitsToDevice(hdc, 0, 0, (uint)_bitmap.Width, (uint)_bitmap.Height, 0, 0, 0, (uint)_bitmap.Height, pixels, ref bmi, (uint)UnmanagedMethods.DIBColorTable.DIB_RGB_COLORS); UnmanagedMethods.ReleaseDC(_hwnd.Handle, hdc); #else throw new NotImplementedException(); #endif _bitmap.UnlockPixels(); }