为什么bmp加载速度比png快

时间:2015-09-09 15:14:32

标签: c# wpf performance bitmap png

我在这里有一个示例wpf应用程序,并想知道为什么BMP的加载速度比PNG快。这是确切的设置:

- Windows 7
- Visual Studio 2013
- landscape.png, 1920x1080, 2.4mb
- landscape.bmp, 1920x1080, 5.6mb
- wpf-app, class MainWindow.xaml.cs constructor, no other code before

代码:

var sw = Stopwatch.StartNew();
var Bitmap1 = new Bitmap("landscape.bmp");
long t1 = sw.ElapsedMilliseconds;

sw.Restart();
var Bitmap2 = new Bitmap("landscape.png");
long t2 = sw.ElapsedMilliseconds;

因此BMP加载大约6ms,PNG需要40ms。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

首先,我们需要了解数字图像是如何存储和显示的,数字图像被表示为一个矩阵,其中矩阵的每个元素都是像素的颜色,如果你有一张灰度图像,那么每个元素都是一个 uint8 (无符号 8 位整数)介于 0 和 255 之间的数字,在某些情况下,它是介于 -128 和 127 之间的 int8(有符号 8 位整数)数字。如果元素为 0(或 int8 版本中的 -128),则颜色为纯黑色,如果元素为 255(或 int8 版本中的 127),则颜色为纯白色。

对于 RGB 图像,上述矩阵的每个元素需要 24 位或 3 字节来存储(每种颜色一个字节),数码相机和智能手机的常见分辨率是 3264 x 2448,用于 8 兆像素相机,现在想象一下我们想保存一个 3264 行的矩阵,其中每行有 2448 个元素,每个元素是 3 字节,我们需要大约 24 兆字节来存储该图像,这对于在互联网上发布或传输或大多数其他目的不是很有效。这就是为什么我们应该压缩图像,我们可以选择 JPEG,这是一种有损压缩方法,这意味着我们确实会损失一些质量,或者我们可以选择像 PNG 这样的无损压缩方法,这会给我们较低的压缩率,但我们不是会失去质量。

不管我们是否选择了压缩图片,当我们想看图片的时候,我们只能显示未压缩版本的图片,如果图片根本没有压缩,那没有问题,我们显示的到底是什么是的,但如果是压缩的,我们必须先对其进行解码(解压缩)。

说了这么多,让我们来回答这个问题。 BMP 是一种用于原始图像的格式,要么根本没有压缩,要么使用的压缩技术比 PNG 或 JPEG 少得多,但文件大小更大。当你想显示一个 BMP 图像时,因为它更大,有更多的数据读入内存,但是当它被读取时,你可以显示它非常快,因为要么不需要解码,要么需要更少的解码,on另一方面,当您想显示 PNG 图像时,图像将更快地读入内存,但与 BMP 相比,解码需要更多时间。

如果您的存储速度很慢,BMP 图像会显示得很慢。 如果您的 CPU 速度非常慢或您的解码软件效率不高,PNG 图像将显示缓慢。