图像与Bitmap类

问题描述 投票:63回答:3

我无法理解Image类和Bitmap类之间的差异。现在,我知道Bitmap继承自Image,但据我所知,两者非常相似。有人可以对此有所了解吗?

c# .net image bitmap
3个回答
63
投票

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

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

查看更多in this comprehensive sample


35
投票

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

正如其他人之前所说的那样 - 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对象 - Bitmap,Metafile或其他任何继承自Image的东西!


11
投票

Image提供对任意图像的抽象访问,它定义了一组可以在Image的任何实现上进行逻辑应用的方法。它不受任何特定图像格式或实现的限制。位图是图像抽象类的特定实现,它封装了窗口GDI位图对象。 Bitmap只是Image抽象类的一个特定实现,它在GDI位图Object上进行中继。

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

无论如何,这只是OOP的一个简单的基本用法,它应该不难捕捉。

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