Изображение против класса Bitmap - PullRequest
64 голосов
/ 04 июня 2009

У меня проблемы с пониманием различий между классом Image и классом Bitmap. Теперь я знаю, что Bitmap наследуется от Image, но из того, что я понимаю, оба очень похожи. Кто-нибудь может пролить свет на это, пожалуйста?

Ответы [ 3 ]

64 голосов
/ 04 июня 2009

Класс Bitmap является реализацией класса Image. Класс Image является абстрактным классом;

Класс Bitmap содержит 12 конструкторов, которые создают объект Bitmap из различных параметров. Он может создать растровое изображение из другого растрового изображения и строкового адреса изображения.

Подробнее в этом всеобъемлющем образце .

37 голосов
/ 19 февраля 2012

Это разъяснение, потому что я видел, как в коде делаются вещи, которые действительно сбивают с толку - я думаю, что следующий пример может помочь другим.

Как уже говорили другие - Растровое изображение наследуется от Абстрактного Изображение Класс

Абстрактно означает, что вы не можете создать его экземпляр 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);

Приятно, что вы можете нарисовать объект 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 голосов
/ 04 июня 2009

Изображение обеспечивает абстрактный доступ к произвольному изображению, оно определяет набор методов, которые могут логически применяться к любой реализации Image. Он не ограничен каким-либо конкретным форматом изображения или реализацией. Растровое изображение - это конкретная реализация абстрактного класса изображений, которая инкапсулирует растровый объект GDI Windows. Растровое изображение - это просто конкретная реализация абстрактного класса Image, которая ретранслирует растровый объект GDI.

Например, вы можете создать свою собственную реализацию для абстрактного изображения, унаследовав его от класса Image и реализовав абстрактные методы.

В любом случае, это просто простое базовое использование ООП, поймать его не должно быть сложно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...