private void OutputData(DmxFrame dmxFrame, Bitmap bitmap, Rectangle bitmapRect, int stride)
{
int[] mapping;
if (dmxFrame.Data != null && this.pixelMapping.TryGetValue(dmxFrame.Universe, out mapping))
{
BitmapData bitmapData = bitmap.LockBits(bitmapRect, ImageLockMode.WriteOnly, bitmap.PixelFormat);
int maxLen = Math.Min(dmxFrame.Data.Length, mapping.Length * 3);
for (int pos = 0; pos < maxLen; pos++)
{
int bytePos = mapping[pos];
if (bytePos >= 0 && bytePos < this.rgbValues.Length)
this.rgbValues[bytePos] = dmxFrame.Data[pos];
}
System.Runtime.InteropServices.Marshal.Copy(this.rgbValues, 0, bitmapData.Scan0, this.rgbValues.Length);
bitmap.UnlockBits(bitmapData);
}
if (dmxFrame.Universe == this.triggerSyncOnUniverse)
this.device.PushOutput(this.sub.Token);
}