public static unsafe FramePixelData FromFile(string filename) { using (Bitmap bitmap = (Bitmap)Bitmap.FromFile(filename)) { var frame = new FramePixelData(bitmap.Width, bitmap.Height); var bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); try { byte *pSourceRow = (byte *)bitmapData.Scan0; int indexFrame = 0; for (int y = 0; y < frame.Height; ++y) { PixelArgb *pPixel = (PixelArgb *)pSourceRow; for (int x = 0; x < frame.Width; ++x) { frame.Data [indexFrame] = new Microsoft.Xna.Framework.Color( pPixel->R, pPixel->G, pPixel->B, pPixel->A); indexFrame++; pPixel++; } pSourceRow += bitmapData.Stride; } } finally { bitmap.UnlockBits(bitmapData); } return(frame); } }
public static unsafe FramePixelData FromFile (string filename) { using (Bitmap bitmap = (Bitmap) Bitmap.FromFile (filename)) { var frame = new FramePixelData (bitmap.Width, bitmap.Height); var bitmapData = bitmap.LockBits ( new Rectangle (0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); try { byte* pSourceRow = (byte*) bitmapData.Scan0; int indexFrame = 0; for (int y = 0; y < frame.Height; ++y) { PixelArgb* pPixel = (PixelArgb*) pSourceRow; for (int x = 0; x < frame.Width; ++x) { frame.Data [indexFrame] = new Microsoft.Xna.Framework.Color ( pPixel->R, pPixel->G, pPixel->B, pPixel->A); indexFrame++; pPixel++; } pSourceRow += bitmapData.Stride; } } finally { bitmap.UnlockBits (bitmapData); } return frame; } }
public static unsafe FramePixelData FromFile(string filename) { var result = ImageResult.FromMemory(File.ReadAllBytes(filename), StbImageSharp.ColorComponents.RedGreenBlueAlpha); var frame = new FramePixelData(result.Width, result.Height); fixed(byte *b = &result.Data[0]) { for (var i = 0; i < result.Data.Length; i += 4) { frame.Data[i / 4] = new Color(b[i + 0], b[i + 1], b[i + 2], b[i + 3]); } } return(frame); }