为什么bmp加载速度比png快

问题描述 投票:0回答:1

我这里有一个示例 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 加载大约需要 6 毫秒,PNG 需要 40 毫秒。

为什么会这样?

c# wpf performance bitmap png
1个回答
6
投票

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

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

无论我们是否选择压缩图像,当我们想要查看图像时,我们只能显示图像的未压缩版本,如果图像根本没有压缩,那么没有问题,我们显示的正是它是什么,但如果它是压缩的,我们必须先解码它(解压缩它)。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.