Example #1
0
        private Bitmap RGBProcess(ref Image destImg, int destX, int destY, int destWidth, int destHeight,
                                  ref Image srcImg, int srcX, int srcY,
                                  RGBProcessDelegate RGBProcessFunction)
        {
            Bitmap dst = new Bitmap(destImg);
            Bitmap src = new Bitmap(srcImg);

            BitmapData dstBD = dst.LockBits(new Rectangle(destX, destY, destWidth, destHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData srcBD = src.LockBits(new Rectangle(srcX, srcY, destWidth, destHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            int dstStride = dstBD.Stride;
            int srcStride = srcBD.Stride;

            System.IntPtr dstScan0 = dstBD.Scan0;
            System.IntPtr srcScan0 = srcBD.Scan0;

            unsafe
            {
                byte *pDst = (byte *)(void *)dstScan0;
                byte *pSrc = (byte *)(void *)srcScan0;

                for (int y = 0; y < destHeight; y++)
                {
                    for (int x = 0; x < destWidth; x++)
                    {
                        RGBProcessFunction(
                            pSrc[x * 3 + 2 + y * srcStride], pSrc[x * 3 + 1 + y * srcStride], pSrc[x * 3 + y * srcStride],
                            ref pDst[x * 3 + 2 + y * dstStride], ref pDst[x * 3 + 1 + y * dstStride], ref pDst[x * 3 + y * dstStride]
                            );
                    }
                }
            }

            src.UnlockBits(srcBD);
            dst.UnlockBits(dstBD);

            src.Dispose();

            return(dst);
        }
Example #2
0
        private Bitmap RGBProcess(ref Image destImg, int destX, int destY, int destWidth, int destHeight, 
			ref Image srcImg, int srcX, int srcY,
			RGBProcessDelegate RGBProcessFunction)
        {
            Bitmap dst = new Bitmap(destImg);
            Bitmap src = new Bitmap(srcImg);

            BitmapData dstBD = dst.LockBits( new Rectangle(destX, destY, destWidth, destHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            BitmapData srcBD = src.LockBits( new Rectangle(srcX, srcY, destWidth, destHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);

            int dstStride = dstBD.Stride;
            int srcStride = srcBD.Stride;

            System.IntPtr dstScan0 = dstBD.Scan0;
            System.IntPtr srcScan0 = srcBD.Scan0;

            unsafe
            {
                byte *pDst = (byte *)(void *)dstScan0;
                byte *pSrc = (byte *)(void *)srcScan0;

                for(int y = 0; y < destHeight; y++)
                {
                    for(int x = 0; x < destWidth; x++)
                    {
                        RGBProcessFunction(
                                pSrc[x * 3 + 2 + y * srcStride], pSrc[x * 3 + 1 + y * srcStride], pSrc[x * 3 + y * srcStride],
                                ref pDst[x * 3 + 2 + y * dstStride], ref pDst[x * 3 + 1 + y * dstStride], ref pDst[x * 3 + y * dstStride]
                            );
                    }
                }
            }

            src.UnlockBits(srcBD);
            dst.UnlockBits(dstBD);

            src.Dispose();

            return dst;
        }