Mik*_*onn 4 c# bitmap image-processing winforms
我写了函数:
public static byte[, ,] Bitmap2Byte(Bitmap image)
{
int h = image.Height;
int w = image.Width;
byte[, ,] result= new byte[w, h, 3];
for (int i = 0; i < w; i++)
{
for (int j = 0; j < h; j++)
{
Color c= image.GetPixel(i, j);
result[i, j, 0] = c.R;
result[i, j, 1] = c.G;
result[i, j, 2] = c.B;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
但转换1800x1800图像需要将近6秒钟.我能更快地做到吗?
编辑:
好的,我发现了这个:http://msdn.microsoft.com/en-us/library/system.drawing.imaging.bitmapdata.aspx
有很好的例子.我唯一的问题是Marshal.Copy
.我可以将数据直接复制到byte[,,]
?
编辑2:
好的,有时我得到奇怪的像素值,它们似乎没有遵循r0 g0 b0 r1 g1 b1规则.为什么?没关系.弄清楚了.
编辑3: 做到了.0,13s vs 5,35s :)
Mus*_*sis 17
您可以通过使用BitmapData
从中返回的对象来大大加快速度Bitmap.LockBits
.Google"C#Bitmap LockBits"提供了大量示例.
GetPixel
是痛苦的,痛苦的慢,使它(具有讽刺意味)完全不适合操纵个别像素.