图像与位图类

Posted

技术标签:

【中文标题】图像与位图类【英文标题】:Image vs Bitmap class 【发布时间】:2010-10-31 02:55:30 【问题描述】:

我很难理解Image 类和Bitmap 类之间的区别。现在,我知道 Bitmap 继承自 Image 但据我了解,两者非常相似。任何人都可以对此有所了解吗?

【问题讨论】:

路人:有更好的答案吧here What is the difference between System.Drawing.Image and System.Drawing.Bitmap?的可能重复 【参考方案1】:

Bitmap 类是 Image 类的实现。 Image 类是一个抽象类;

Bitmap 类包含 12 个构造函数,它们从不同的参数构造 Bitmap 对象。它可以从另一个位图和图像的字符串地址构造位图。

查看更多in this comprehensive sample。

【讨论】:

我认为您的意思是抽象图像类的实现。【参考方案2】:

这是一个澄清,因为我看到在代码中完成的事情确实令人困惑 - 我认为以下示例可能对其他人有所帮助。

正如其他人之前所说 - Bitmap 继承自 Abstract Image

Abstract 实际上意味着你不能创建它的 New() 实例。

    Image imgBad1 = new Image();        // Bad - won't compile
    Image imgBad2 = new Image(200,200); // Bad - won't compile

但是您可以执行以下操作:

    Image imgGood;  // Not instantiated object!
    // Now you can do this
    imgGood = new Bitmap(200, 200);

如果您执行了以下操作,您现在可以像使用相同的位图对象一样使用 imgGood:

    Bitmap bmpGood = new Bitmap(200,200);

这里的好处是您可以使用 Graphics 对象来绘制 imgGood 对象

    Graphics gr = default(Graphics);
    gr = Graphics.FromImage(new Bitmap(1000, 1000));
    Rectangle rect = new Rectangle(50, 50, imgGood.Width, imgGood.Height); // where to draw
    gr.DrawImage(imgGood, rect);

这里 imgGood 可以是任何图像对象 - 位图、元文件或任何其他继承自 Image 的对象!

【讨论】:

【参考方案3】:

Image 提供对任意图像的抽象访问,它定义了一组可以在逻辑上应用于 Image 的任何实现的方法。它不受任何特定图像格式或实现的限制。位图是封装windows GDI位图对象的图像抽象类的具体实现。 Bitmap 只是 Image 抽象类的一个具体实现,它依赖于 GDI 位图对象。

例如,您可以通过从 Image 类继承并实现抽象方法来创建自己的 Image 抽象实现。

不管怎样,这只是 OOP 的一个简单的基本用法,应该不难掌握。

【讨论】:

以上是关于图像与位图类的主要内容,如果未能解决你的问题,请参考以下文章

比较 Android 中的位图图像

为啥使用矩阵到图像视图与位图的结果不同?

数据与封装格式BMP图像(位图)

HarmonyOS之深入解析图像的位图操作和属性解码

计算机视觉数字图像与机器视觉基础

无法将位图图像获取到图像视图