将PNG文件加载到.Net位图很容易:
Bitmap bmp = (Bitmap)Bitmap.FromFile("c:\wherever\whatever.png");
// yes, the (Bitmap) cast is necessary. Don't ask me why.
Run Code Online (Sandbox Code Playgroud)
加载Bitmap后,您可以使用Bitmap的LockBits方法最有效地访问其所有信息(包括Alpha通道信息)(StackOverflow上有许多LockBits代码示例).
更新:这是一个代码示例,演示如何使用LockBits逐个像素地访问位图的数据:
System.Drawing.Imaging.BitmapData data =
bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
unsafe
{
// important to use the BitmapData object's Width and Height
// properties instead of the Bitmap's.
for (int x = 0; x < data.Width; x++)
{
int columnOffset = x * 4;
for (int y = 0; y < data.Height; y++)
{
byte* row = (byte*)data.Scan0 + (y * data.Stride);
byte B = row[columnOffset];
byte G = row[columnOffset + 1];
byte R = row[columnOffset + 2];
byte alpha = row[columnOffset + 3];
}
}
}
bmp.UnlockBits(data);
Run Code Online (Sandbox Code Playgroud)
您需要为项目设置"允许不安全代码"编译器选项才能使用此代码.您也可以使用Bitmap的GetPixel(x,y)方法,但这非常慢.
| 归档时间: |
|
| 查看次数: |
4904 次 |
| 最近记录: |