// 性能最高,其數組和像素一一對應
public static void test1(Image img)
{
Bitmap bmp = new Bitmap(img);
BitmapData bitmapData = bmp.LockBits(new Rectangle(new Point(0, 0), img.Size),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
byte[] BGRValues = new byte[bitmapData.Stride * bitmapData.Height];
IntPtr Ptr = bitmapData.Scan0;
System.Runtime.InteropServices.Marshal.Copy(Ptr, BGRValues, 0,
BGRValues.Length);
bmp.UnlockBits(bitmapData);
}
// 性能較低,數組內容較少,內容未知
public static void test2(Image img)
{
System.Drawing.ImageConverter ic = new System.Drawing.ImageConverter();
byte[] btImage1 = new byte[0];
btImage1 = (byte[])ic.ConvertTo(img, btImage1.GetType());
}
// 性能較低,數組內容為圖片格式內容,格式未知
public static void test3(Image img)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
img.Save(ms,ImageFormat.Bmp);
byte[] byteImage = new Byte[0];
byteImage = ms.ToArray();
}
下面說說他們的特點
test1和test3性能十分接近,test2性能要比前2個明顯低一些,應為它們都是內存操作,當然快了。
test3在單次各種測試候都比test1要快一點點,真的是一點點,但是在做5000次測試時,test3就明顯 拉開了距離;
那麼可以看出test3在某條語句上耗時了,但可能不是數組操作,比較在內存裡,我個人認為是 ImageFormat編碼的耗時,當然,你用ImageFormat.Png獲得的byte[]長度明顯變短,
但是耗時也明顯增加。
test2一如既往的明顯慢。