Ejemplo n.º 1
0
            public void CopyToBitmap(Rectangle imageArea, IntPtr bitmap, int bitmapStride)
            {
                NativeBitmapSourceParameterValidation.CopyToBitmap(this, imageArea, bitmap, bitmapStride, out int requiredBufferSize);

                if (imageArea.Width <= 0 || imageArea.Height <= 0)
                {
                    return;
                }

                WICRect rect = new WICRect(imageArea.X, imageArea.Y, imageArea.Width, imageArea.Height);

                source.CopyPixels(rect, (uint)bitmapStride, (uint)requiredBufferSize, bitmap);
            }
Ejemplo n.º 2
0
        public void CopyToBitmap(Rectangle imageArea, IntPtr bitmap, int bitmapStride)
        {
            NativeBitmapSourceParameterValidation.CopyToBitmap(this, imageArea, bitmap, bitmapStride, out _);

            GCHandle pixelsHandle = GCHandle.Alloc(Pixels, GCHandleType.Pinned);

            try
            {
                IntPtr pixelsPtr = pixelsHandle.AddrOfPinnedObject() + (imageArea.Y * Width + imageArea.X) * 4;
                PixelConverter.Convert_PARGB_32_To_ARGB_32(pixelsPtr, Width * 4, bitmap, bitmapStride, imageArea.Width, imageArea.Height);
            }
            finally
            {
                pixelsHandle.Free();
            }
        }
Ejemplo n.º 3
0
            public void CopyToBitmap(Rectangle imageArea, IntPtr bitmap, int bitmapStride)
            {
                NativeBitmapSourceParameterValidation.CopyToBitmap(this, imageArea, bitmap, bitmapStride, out _);

                if (pixelFormat == PixelFormat.RGBA_32)
                {
                    IntPtr pixelsPtr = dataPtr + imageArea.Y * stride + imageArea.X * 4;
                    PixelConverter.Convert_RGBA_32BE_To_ARGB_32(pixelsPtr, stride, bitmap, bitmapStride, imageArea.Width, imageArea.Height);
                }
                else if (pixelFormat == PixelFormat.RGB_24)
                {
                    IntPtr pixelsPtr = dataPtr + imageArea.Y * stride + imageArea.X * 3;
                    PixelConverter.Convert_RGB_24BE_To_ARGB_32(pixelsPtr, stride, bitmap, bitmapStride, imageArea.Width, imageArea.Height);
                }
                else
                {
                    throw new InvalidOperationException($"Unexpected pixel format: {pixelFormat}.");
                }
            }
Ejemplo n.º 4
0
        public void CopyFromBitmap(Rectangle imageArea, IntPtr bitmap, int bitmapStride)
        {
            // todo: create separate validation ?
            NativeBitmapSourceParameterValidation.CopyToBitmap(this, imageArea, bitmap, bitmapStride, out _);

            using (X11Bitmap xBitmap = X11Bitmap.Create(Display, Visual, imageArea.Width, imageArea.Height))
            {
                PixelConverter.Convert_ARGB_32_To_PARGB_32(bitmap, bitmapStride, xBitmap.ImageData, imageArea.Width * 4, imageArea.Width, imageArea.Height);

                var gcValues = new XGCValues();
                var gc       = LibX11.XCreateGC(Display, PixmapId, 0, ref gcValues);
                try
                {
                    LibX11.XPutImage(Display, PixmapId, gc, xBitmap.XImage, 0, 0, imageArea.X, imageArea.Y, (uint)imageArea.Width, (uint)imageArea.Height);
                }
                finally
                {
                    LibX11.XFreeGC(Display, gc);
                }
            }
        }
Ejemplo n.º 5
0
        public void CopyToBitmap(Rectangle imageArea, IntPtr bitmap, int bitmapStride)
        {
            NativeBitmapSourceParameterValidation.CopyToBitmap(this, imageArea, bitmap, bitmapStride, out _);

            using (X11Bitmap xBitmap = X11Bitmap.Create(Display, Visual, imageArea.Width, imageArea.Height))
            {
                LibX11.XGetSubImage(
                    Display,
                    PixmapId,
                    imageArea.X,
                    imageArea.Y,
                    (uint)imageArea.Width,
                    (uint)imageArea.Height,
                    ulong.MaxValue,
                    XImageFormat.ZPixmap,
                    xBitmap.XImage,
                    0,
                    0
                    );

                PixelConverter.Convert_PARGB_32_To_ARGB_32(xBitmap.ImageData, imageArea.Width * 4, bitmap, bitmapStride, imageArea.Width, imageArea.Height);
            }
        }