private static unsafe byte[] ToRGBFrom32Bpp(BitmapData imageData) { int width = imageData.Width; int height = imageData.Height; int destStride = width * sizeof(RGB); var dist = new byte[imageData.Width * imageData.Height * 3]; ARGB *srcImgPtr = (ARGB *)imageData.Scan0; fixed(byte *destImgDataPinnedPtr = dist) { byte *destImageDataPtr = destImgDataPinnedPtr; Parallel.For(0, imageData.Height, y => { RGB *yDestRgbPtr = (RGB *)(destImageDataPtr + (destStride * y)); ARGB *ySrcRgbPtr = srcImgPtr + (width * y); for (int x = 0; x < width; ++x) { ySrcRgbPtr++->ReverseTo(yDestRgbPtr++); } }); } return(dist); }
public static extern unsafe GpStatus GdipGetPenColor( GpPen pen, ARGB *argb);
public static unsafe extern float RenderImage3(void *scene, RenderConfiguration config, ARGB *buffer, ref float progress);