public static unsafe IImageByte <RgbImageType> ToMetaqubeImage(this Bitmap @this) { var answer = new ImageByte <RgbImageType>(@this.Width, @this.Height); var step = answer.Step; var pixels = new int[@this.ByteCount / sizeof(int)]; @this.GetPixels(pixels, offset: 0, stride: @this.Width, x: 0, y: 0, width: @this.Width, height: @this.Height); using (var pin = answer.Open()) { var ptr = pin.Ptr; for (var j = 0; j < @this.Height; j++) { var pixelPtr = ptr; for (var i = 0; i < @this.Width; i++) { var argb = pixels[j * @this.Width + i]; pixelPtr[0] = (byte)((argb >> 16) & 0xFF); pixelPtr[1] = (byte)((argb >> 8) & 0xFF); pixelPtr[2] = (byte)(argb & 0xFF); pixelPtr += step.X; } ptr += step.Y; } } return(answer); }
public static unsafe IImageByte <RgbImageType> ToMetaqubeImage(this Bitmap @this) { var answer = new ImageByte <RgbImageType>(@this.Width, @this.Height); var step = answer.Step; var dimensions = answer.Dimensions; using (var pin = answer.Open()) { var ptr = pin.Ptr; for (var j = 0; j < dimensions.Y; j++) { var pixelPtr = ptr; for (var i = 0; i < dimensions.X; i++) { var colour = @this.GetPixel(i, j); // TODO: Implement using Bitmap.LockBits pixelPtr[0] = colour.R; pixelPtr[1] = colour.G; pixelPtr[2] = colour.B; pixelPtr += step.X; } ptr += step.Y; } } return(answer); }