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); }
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; }