好吧,您总是可以使用 GDI+ 方法。
Bitmap b = new Bitmap( "some path" );
Color x = b.GetPixel( x, y );
但是,GetPixel 实际上很慢。首先尝试这种方式,但如果您需要扫描许多相对较大的图像,它可能不适合您。在这种情况下,使用 LockBits 获取指向连续内存块的指针。然后,您可以快速循环浏览图像,但您必须知道如何操作指针,尽管它并不是非常复杂。
编辑:使用 LockBits 查看每个像素:
Bitmap b = new Bitmap( "some path" );
BitmapData data = b.LockBits( new Rectangle( 0, 0, b.Width, b.Height ),
ImageLockMode.ReadOnly, b.PixelFormat ); // make sure you check the pixel format as you will be looking directly at memory
unsafe
{
// example assumes 24bpp image. You need to verify your pixel depth
// loop by row for better data locality
for( int y = 0; y < data.Height; ++y )
{
byte* pRow = (byte*)data.Scan0 + y * data.Stride;
for( int x = 0; x < data.Width; ++x )
{
// windows stores images in BGR pixel order
byte r = pRow[2];
byte g = pRow[1];
byte b = pRow[0];
// next pixel in the row
pRow += 3;
}
}
}
b.UnlockBits(data);
如果您的图像在末尾被填充,您可以使用 BitmapData.Stride 属性来获取每个新行的开头(否则您将读取一些垃圾并且您的偏移量会很糟糕)。