// 性能最高,其數組和像素一一對應 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一如既往的明顯慢。