public static int[] CopyImgBuffer(ActualBitmap img, int width) { //calculate stride for the width int destStride = ActualBitmap.CalculateStride(width, CpuBlit.Imaging.PixelFormat.ARGB32); int h = img.Height; int newBmpW = destStride / 4; int[] buff2 = new int[newBmpW * img.Height]; unsafe { CpuBlit.Imaging.TempMemPtr srcBufferPtr = ActualBitmap.GetBufferPtr(img); byte *srcBuffer = (byte *)srcBufferPtr.Ptr; int srcIndex = 0; int srcStride = img.Stride; fixed(int *destHead = &buff2[0]) { byte *destHead2 = (byte *)destHead; for (int line = 0; line < h; ++line) { //System.Runtime.InteropServices.Marshal.Copy(srcBuffer, srcIndex, (IntPtr)destHead2, destStride); NativeMemMx.memcpy((byte *)destHead2, srcBuffer + srcIndex, destStride); srcIndex += srcStride; destHead2 += destStride; } } srcBufferPtr.Release(); } return(buff2); }
public static int[] CopyImgBuffer(ActualBitmap img) { int[] buff2 = new int[img.Width * img.Height]; unsafe { //byte[] pixelBuffer = ActualImage.GetBuffer(img); CpuBlit.Imaging.TempMemPtr pixBuffer = ActualBitmap.GetBufferPtr(img); //fixed (byte* header = &pixelBuffer[0]) byte *header = (byte *)pixBuffer.Ptr; { System.Runtime.InteropServices.Marshal.Copy((IntPtr)header, buff2, 0, buff2.Length);//length in bytes } pixBuffer.Release(); } return(buff2); }
public static int[] CopyImgBuffer(ActualBitmap src, int srcX, int srcY, int srcW, int srcH) { //calculate stride for the width int destStride = ActualBitmap.CalculateStride(srcW, CpuBlit.Imaging.PixelFormat.ARGB32); int newBmpW = destStride / 4; int[] buff2 = new int[newBmpW * srcH]; unsafe { CpuBlit.Imaging.TempMemPtr srcBufferPtr = ActualBitmap.GetBufferPtr(src); byte *srcBuffer = (byte *)srcBufferPtr.Ptr; int srcIndex = 0; int srcStride = src.Stride; fixed(int *destHead = &buff2[0]) { byte *destHead2 = (byte *)destHead; //move to specific src line srcIndex += srcStride * srcY; int lineEnd = srcY + srcH; for (int line = srcY; line < lineEnd; ++line) { //System.Runtime.InteropServices.Marshal.Copy(srcBuffer, srcIndex, (IntPtr)destHead2, destStride); NativeMemMx.memcpy((byte *)destHead2, srcBuffer + srcIndex, destStride); srcIndex += srcStride; destHead2 += destStride; } } srcBufferPtr.Release(); } return(buff2); }