public override Frame Process(Frame sourceFrame) { var width = sourceFrame.Width; var height = sourceFrame.Height; var destData = new RgbFrame(width, height, PixelFormatType.PIX_FMT_RGB24); for (int y = 0, k = 0, l = 0; y < height; y++) { for (var x = 0; x < width; x++) { var cVal = sourceFrame[0][k] - 16; var dVal = sourceFrame[1][k] - 128; var eVal = sourceFrame[2][k] - 128; destData.Data[l] = (byte)Clip(0, 255, (298 * cVal + 409 * eVal + 128) >> 8); l++; destData.Data[l] = (byte)Clip(0, 255, (298 * cVal - 100 * dVal - 208 * eVal + 128) >> 8); l++; destData.Data[l] = (byte)Clip(0, 255, (298 * cVal + 516 * dVal + 128) >> 8); l++; k++; } } return destData; }
public void ShouldAbleToCreateAndDestroyRgb32Frame() { var frame = new RgbFrame(50, 50, PixelFormatType.PIX_FMT_RGB32); Assert.AreEqual(frame.Width, 50); Assert.AreEqual(frame.Height, 50); Assert.AreNotEqual(frame.Data, null); Assert.AreEqual(frame.Data.Length, (50 * 50 * 4)); }