public void DrawImage(Bitmap bitmap)
{
if (this.pixelsChangedAction != null)
{
int stride;
lock (this)
{
this.outputGraphics.DrawImageUnscaled(bitmap, -StartPosition, 0);
if (this.reverse)
this.outputBitmap.RotateFlip(RotateFlipType.RotateNoneFlipX);
BitmapData bitmapData = this.outputBitmap.LockBits(this.outputRectangle, ImageLockMode.ReadOnly, this.outputBitmap.PixelFormat);
stride = bitmapData.Stride;
System.Runtime.InteropServices.Marshal.Copy(bitmapData.Scan0, pixels, 0, pixels.Length);
this.outputBitmap.UnlockBits(bitmapData);
}
// Shift little/big-endian
if (BitConverter.IsLittleEndian)
{
for (int y = 0; y < this.outputRectangle.Height; y++)
{
for (int x = 0; x < this.outputRectangle.Width; x++)
{
int bytePos = y * stride + x * 3;
byte b1 = this.pixels[bytePos + 2];
this.pixels[bytePos + 2] = this.pixels[bytePos];
this.pixels[bytePos] = b1;
}
}
}
this.pixelsChangedAction(this.pixels);
}
}