图像与位图类的区别

78

我不太理解Image类和Bitmap类之间的区别。我知道Bitmap类继承自Image类,但据我所知它们非常相似。请问有人可以阐明一下吗?


3
路人甲:这里有一个更好的答案链接 - kdbanman
3个回答

71

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

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

这个全面的示例中了解更多信息。


7
我认为你的意思是实现抽象图像类。 - kenny

40

我想澄清一下,因为我看到代码中有些东西很令人困惑-我认为以下示例可能会帮助其他人。

正如其他人之前所说-Bitmap继承自抽象的Image类。

抽象实际上意味着您无法创建它的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可以是任何图像对象 - 位图、元文件,或者其他继承自图像的对象!


11

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

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

无论如何,这只是面向对象编程的简单基本用法,应该很容易理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接