我需要一种方法将1000+ 8位位图转换为8位1位图。
目前我正在运行两个循环,它从主图像中读取每个像素并为其分配一个1bpp图像。这需要很长时间才能完成,无论如何更好吗?
以下是我的代码示例(仅分为两个图像):
Bitmap rawBMP = new Bitmap(path);
Bitmap supportRAW = new Bitmap(rawBMP.Width, rawBMP.Height);
Bitmap modelRAW = new Bitmap(rawBMP.Width, rawBMP.Height);
Color color = new Color();
for (int x = 0; x < rawBMP.Width; x++)
{
for (int y = 0; y < rawBMP.Height; y++)
{
color = rawBMP.GetPixel(x, y);
if (color.R == 166) //model
{
modelRAW.SetPixel(x, y, Color.White);
}
if (color.R == 249) //Support
{
supportRAW.SetPixel(x, y, Color.White);
}
}
}
var supportBMP = supportRAW.Clone(new Rectangle(0, 0, rawBMP.Width, rawBMP.Height), System.Drawing.Imaging.PixelFormat.Format1bppIndexed);
var modelBMP = modelRAW.Clone(new Rectangle(0, 0, rawBMP.Width, rawBMP.Height), System.Drawing.Imaging.PixelFormat.Format1bppIndexed);
答案 0 :(得分:0)
如果你必须检查每个像素,那么你将不得不至少一次遍历它们,但是像TaW建议有更有效的方法来访问像素。
SetPixel和GetPixel比直接访问数据慢得多,查看使用unsafe直接访问数据,或编组来回复制数据。 (请参阅https://stackoverflow.com/a/1563170以获取notJim撰写的更详细信息)