CCT.NUI.Core.Video.RgbBitmapFactory.CreateImage C# (CSharp) Méthode

CreateImage() public méthode

public CreateImage ( Bitmap targetImage, IntPtr pointer ) : void
targetImage System.Drawing.Bitmap
pointer System.IntPtr
Résultat void
        public unsafe void CreateImage(Bitmap targetImage, IntPtr pointer)
        {
            var area = new System.Drawing.Rectangle(0, 0, targetImage.Width, targetImage.Height);
            BitmapData bitmapData = targetImage.LockBits(area, ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            byte* pImage = (byte*)pointer.ToPointer();
            byte* pDest = (byte*)bitmapData.Scan0.ToPointer();

            int maxIndex = area.Width * area.Height;
            for (int index = 0; index < maxIndex; index++)
            {
                pDest[0] = pImage[2];
                pDest[1] = pImage[1];
                pDest[2] = pImage[0];
                pDest += 3;
                pImage += 3;
            }
            targetImage.UnlockBits(bitmapData);
        }
    }

Usage Example

        public void Can_Create_Color_Image()
        {
            var bitmap = new Bitmap(20, 10);
            var imageFactory = new RgbBitmapFactory();

            var pointerFactory = new ArrayToPointerFactory();
            var data = new ushort[20 * 10 * 2];
            for (int index = data.Length / 2; index < data.Length; index++)
            {
                data[index] = ushort.MaxValue;
            }
            var pointer = pointerFactory.CreatePointer(data);
            try
            {
                imageFactory.CreateImage(bitmap, pointer);
            }
            finally
            {
                pointerFactory.Destroy(pointer);
            }

            var color = bitmap.GetPixel(0, 0);
            var color2 = bitmap.GetPixel(10, 9);

            Assert.AreEqual(0, color.R);
            Assert.AreEqual(0, color.G);
            Assert.AreEqual(0, color.B);

            Assert.AreEqual(255, color2.R);
            Assert.AreEqual(255, color2.G);
            Assert.AreEqual(255, color2.B);
        }