Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }