private void SetPixel( int x, int y, byte r, byte g, byte b, byte a )
{
if ( ( x >= 0 ) && ( y >= 0 ) && ( x < width ) && ( y < height ) )
{
unsafe
{
int pixelSize = Bitmap.GetPixelFormatSize( pixelFormat ) / 8;
byte* ptr = (byte*) imageData.ToPointer( ) + y * stride + x * pixelSize;
ushort* ptr2 = (ushort*) ptr;
switch ( pixelFormat )
{
case PixelFormat.Format8bppIndexed:
*ptr = (byte) ( 0.2125 * r + 0.7154 * g + 0.0721 * b );
break;
case PixelFormat.Format24bppRgb:
case PixelFormat.Format32bppRgb:
ptr[RGB.R] = r;
ptr[RGB.G] = g;
ptr[RGB.B] = b;
break;
case PixelFormat.Format32bppArgb:
ptr[RGB.R] = r;
ptr[RGB.G] = g;
ptr[RGB.B] = b;
ptr[RGB.A] = a;
break;
case PixelFormat.Format16bppGrayScale:
*ptr2 = (ushort) ( (ushort) ( 0.2125 * r + 0.7154 * g + 0.0721 * b ) << 8 );
break;
case PixelFormat.Format48bppRgb:
ptr2[RGB.R] = (ushort) ( r << 8 );
ptr2[RGB.G] = (ushort) ( g << 8 );
ptr2[RGB.B] = (ushort) ( b << 8 );
break;
case PixelFormat.Format64bppArgb:
ptr2[RGB.R] = (ushort) ( r << 8 );
ptr2[RGB.G] = (ushort) ( g << 8 );
ptr2[RGB.B] = (ushort) ( b << 8 );
ptr2[RGB.A] = (ushort) ( a << 8 );
break;
default:
throw new UnsupportedImageFormatException( "The pixel format is not supported: " + pixelFormat );
}
}
}
}