unsafe static private int ARGB32_To_RGB24( int dwWidthInPixels, int dwHeightInPixels, int dwDestStride, IntPtr ipSrc, IntPtr ipDest ) { RGBQUAD *pSrc = (RGBQUAD *)ipSrc; RGB24 * pDest = (RGB24 *)ipDest; for (int y = 0; y < dwHeightInPixels; y++) { for (int x = 0; x < dwWidthInPixels; x++) { pDest[x].rgbRed = pSrc[x].R; pDest[x].rgbGreen = pSrc[x].G; pDest[x].rgbBlue = pSrc[x].B; } pSrc += dwWidthInPixels * 3; pDest += dwDestStride; } return(dwDestStride * dwHeightInPixels); }
public void Copy(ByteImage byteImage) { byte * p = byteImage.Data(0, 0); RGB24 *pOut = data; for (int i = 0; i < width * height; i++) { pOut->R = pOut->G = pOut++->B = *p++; } }
public void Copy(RGBImage rgbImage) { RGB24 * p = rgbImage.Data(0, 0); ARGB32 *pOut = data; for (int i = 0; i < width * height; i++) { pOut->A = 255; pOut->R = p->R; pOut->G = p->G; pOut++->B = p++->B; } }
public void DecimateAndReduce(RGBImage a, int factor) { byte *output = data; for (int y = 0; y < height; y++) { RGB24 *pa = a.Data(0, y * factor); for (int x = 0; x < width; x++) { *output++ = (*pa).R; pa += factor; } } }
public void CopyRectangle(RGBImage rgbImage, int startX, int startY, int w, int h) { RGB24 * pOrig = rgbImage.Data(0, 0); ARGB32 *pOutOrig = data; RGB24 * p; ARGB32 *pOut; for (int j = startY; j < h; j++) { for (int i = startX; i < w; i++) { p = pOrig + j * rgbImage.Width + i; pOut = pOutOrig + j * width + i; pOut->A = 255; pOut->R = p->R; pOut->G = p->G; pOut->B = p->B; } } }
//------------------------------------------------------------------- // TransformImage_RGB24 // // RGB-24 to RGB-32 //------------------------------------------------------------------- unsafe private static void TransformImage_RGB24(IntPtr pDest, int lDestStride, IntPtr pSrc, int lSrcStride, int dwWidthInPixels, int dwHeightInPixels) { RGB24 * source = (RGB24 *)pSrc; RGBQUAD *dest = (RGBQUAD *)pDest; lSrcStride /= 3; lDestStride /= 4; for (int y = 0; y < dwHeightInPixels; y++) { for (int x = 0; x < dwWidthInPixels; x++) { dest[x].R = source[x].rgbRed; dest[x].G = source[x].rgbGreen; dest[x].B = source[x].rgbBlue; dest[x].A = 0; } source += lSrcStride; dest += lDestStride; } }
public RGBImage(int width, int height, IntPtr dataIntPtr) : base(width, height, dataIntPtr, sizeof(RGB24)) { data = (RGB24 *)dataIntPtr.ToPointer(); }
public RGBImage(int width, int height, IntPtr dataIntPtr) : base(width, height, dataIntPtr, sizeof(RGB24)) { data = (RGB24*)dataIntPtr.ToPointer(); }