internal Yuv444(Image original) : this(original.Size, original.CoordinateSystem, original.Crop) { unsafe { int x = 0; int width = this.Size.Width; byte* yRow = (byte*)this.Y.Pointer; byte* yDestination = yRow; byte* uRow = (byte*)this.U.Pointer; byte* uDestination = uRow; byte* vRow = (byte*)this.V.Pointer; byte* vDestination = vRow; original.Apply(color => { *(yDestination++) = color.Y; *(uDestination++) = color.U; *(vDestination++) = color.V; x++; if (x >= width) { x = 0; yRow += this.Y.Stride; yDestination = yRow; uRow += this.U.Stride; uDestination = uRow; vRow += this.V.Stride; vDestination = vRow; } }); } }
internal Yuyv(Image original) : this(original.Size, original.CoordinateSystem, original.Crop) { unsafe { int y = 0; int x = 0; int width = this.Size.Width; byte* row = (byte*)this.Pointer; byte* yDestination = row; byte* uDestination = row + 1; byte* vDestination = row + 3; original.Apply(color => { *yDestination = color.Y; yDestination += 2; if (x % 2 == 0) { *uDestination = color.U; *vDestination = color.V; uDestination += 4; vDestination += 4; } x++; if (x >= width) { x = 0; y++; row += this.Stride; yDestination = row; uDestination = row + 1; vDestination = row + 3; } }); } }
internal Bgr(Image original) : this(original.Size, original.CoordinateSystem, original.Crop) { unsafe { byte* row = (byte*)this.Pointer; int rowLength = this.Size.Width; Color.Bgr* rowEnd = (Color.Bgr*)row + rowLength; Color.Bgr* destination = (Color.Bgr*)row; original.Apply((color) => { *(destination++) = color; if (destination >= rowEnd) { row += this.Stride; destination = (Color.Bgr*)row; rowEnd = (Color.Bgr*)row + rowLength; } }); } }
internal Bgra(Image original) : this(original.Size, original.CoordinateSystem, original.Crop) { unsafe { int* destination = (int*)this.Pointer; original.Apply(color => *((Color.Bgra*)destination++) = new Color.Bgra(color, 255)); } }