public override void DrawImage(GraphicsHandler graphics, Rectangle source, Rectangle destination) { var bd = bmp.Lock(); // we have to draw to a temporary bitmap pixel by pixel unsafe { fixed(byte *pSrc = Control) { var dest = (byte *)bd.Data; var src = pSrc; var scany = rowStride; if (graphics.Flipped) { src += Control.Length - scany; scany = -scany; } dest += source.Top * bd.ScanWidth; dest += source.Left * sizeof(uint); src += source.Top * scany; src += source.Left; for (int y = source.Top; y <= source.Bottom; y++) { var srcrow = src; var destrow = (uint *)dest; for (int x = source.Left; x <= source.Right; x++) { var palindex = *srcrow; var color = colors[palindex]; * destrow = bd.TranslateArgbToData(color); destrow++; srcrow++; } dest += bd.ScanWidth; src += scany; } } } bmp.Unlock(bd); bmp.DrawImage(graphics, source, destination); }
void UpdateBitmap(Rectangle source, bool flipped = false) { var bd = bmp.Lock(); // we have to draw to a temporary bitmap pixel by pixel unsafe { fixed(byte *pSrc = Control) { var dest = (byte *)bd.Data; var src = pSrc; var scany = rowStride; if (flipped) { src += Control.Length - scany; scany = -scany; } dest += source.Top * bd.ScanWidth; dest += source.Left * sizeof(uint); src += source.Top * scany; src += source.Left; for (int y = source.Top; y <= source.Bottom; y++) { var srcrow = src; var destrow = (uint *)dest; for (int x = source.Left; x <= source.Right; x++) { var palindex = *srcrow; var color = colors[palindex]; * destrow = bd.TranslateArgbToData(color); destrow++; srcrow++; } dest += bd.ScanWidth; src += scany; } } } bmp.Unlock(bd); }