using (var bmp = new Bitmap(image)) { var data = bmp.LockBits( new Rectangle(Point.Empty, image.Size), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb );
privatevoidLoadBmp() { using (var image = Image.FromFile("test.bmp")) using (var bmp = new Bitmap(image)) { var data = bmp.LockBits ( new Rectangle(Point.Empty, image.Size), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb ); var rgbStride = image.Width * 3; var argbStride = image.Width * 4; var original = newbyte[rgbStride * image.Height]; var destRgb = newbyte[rgbStride * image.Height]; var destArgb = newbyte[argbStride * image.Height]; unsafe { fixed (byte* originalPtr = original) fixed (byte* destArgbPtr = destArgb) fixed (byte* destRgbPtr = destRgb) { // Put the original 24bit RGB pixel data into an array for // later validation. Buffer.MemoryCopy ( (void*)data.Scan0, originalPtr, original.Length, original.Length );
// Convert the source 24bit RGB pixel data to 32bit ARGB. // This conversion is lossless. LibYuv.RGB24ToARGB ( (byte*)data.Scan0, rgbStride, destArgbPtr, argbStride, image.Width, image.Height );
// Convert the newly created 32bit ARGB back to the original // 24bit RGB. This conversion is lossless. LibYuv.ARGBToRGB24 ( destArgbPtr, argbStride, destRgbPtr, rgbStride, image.Width, image.Height ); } } bmp.UnlockBits(data); } }
privatevoidLoadBmp() { using (var image = Image.FromFile("test.bmp")) using (var bmp = new Bitmap(image)) { var data = bmp.LockBits ( new Rectangle(Point.Empty, image.Size), ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb ); var rgbStride = image.Width * 3; var argbStride = image.Width * 4; var original = newbyte[rgbStride * image.Height]; var destRgb = newbyte[rgbStride * image.Height]; var destArgb = newbyte[argbStride * image.Height]; unsafe { fixed (byte* originalPtr = original) fixed (byte* destArgbPtr = destArgb) fixed (byte* destRgbPtr = destRgb) { // Put the original 24bit RGB pixel data into an array for // later validation. Buffer.MemoryCopy ( (void*)data.Scan0, originalPtr, original.Length, original.Length );
// Convert the source 24bit RGB pixel data to 32bit ARGB. // This conversion is lossless. LibYuv.RGB24ToARGB ( (byte*)data.Scan0, rgbStride, destArgbPtr, argbStride, image.Width, image.Height );
// Convert the newly created 32bit ARGB back to the original // 24bit RGB. This conversion is lossless. LibYuv.ARGBToRGB24 ( destArgbPtr, argbStride, destRgbPtr, rgbStride, image.Width, image.Height ); } } bmp.UnlockBits(data); } }