private unsafe void TransferDataFormat1bppIndexed(BitmapData imgData, PixData pixData) { var height = imgData.Height; var width = imgData.Width / 8; for (int y = 0; y < height; y++) { byte *imgLine = (byte *)imgData.Scan0 + (y * imgData.Stride); uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine); for (int x = 0; x < width; x++) { byte pixelVal = BitmapHelper.GetDataByte(imgLine, x); PixData.SetDataByte(pixLine, x, pixelVal); } } }
private unsafe void TransferDataFormat24bppRgb(BitmapData imgData, PixData pixData) { var imgFormat = imgData.PixelFormat; var height = imgData.Height; var width = imgData.Width; for (int y = 0; y < height; y++) { byte *imgLine = (byte *)imgData.Scan0 + (y * imgData.Stride); uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine); for (int x = 0; x < width; x++) { byte *pixelPtr = imgLine + x * 3; byte blue = pixelPtr[0]; byte green = pixelPtr[1]; byte red = pixelPtr[2]; PixData.SetDataFourByte(pixLine, x, BitmapHelper.EncodeAsRGBA(red, green, blue, 255)); } } }
private unsafe void TransferDataFormat32bppArgb(BitmapData imgData, PixData pixData) { var imgFormat = imgData.PixelFormat; var height = imgData.Height; var width = imgData.Width; for (int y = 0; y < height; y++) { byte *imgLine = (byte *)imgData.Scan0 + (y * imgData.Stride); uint *pixLine = (uint *)pixData.Data + (y * pixData.WordsPerLine); for (int x = 0; x < width; x++) { byte *pixelPtr = imgLine + (x << 2); byte blue = *pixelPtr; byte green = *(pixelPtr + 1); byte red = *(pixelPtr + 2); byte alpha = *(pixelPtr + 3); PixData.SetDataFourByte(pixLine, x, BitmapHelper.EncodeAsRGBA(red, green, blue, alpha)); } } }
public uint ToRGBA() { return(BitmapHelper.EncodeAsRGBA(red, green, blue, alpha)); }