В последнее время я много читаю на своем С# (моя команда медленно переходит на С#), и мне трудно понять различия между классом Image
и классом Bitmap
. Теперь я знаю, что Bitmap
наследует класс Image, но из того, что я понимаю, оба очень похожи. Может ли кто-нибудь пролить свет на это, пожалуйста?
Изображение против класса Bitmap
Ответ 1
Класс Bitmap представляет собой реализацию класса Image. Класс Image является абстрактным классом;
Класс Bitmap содержит 12 конструкторов, которые строят объект Bitmap из разных параметров. Он может построить битмап из другого растрового изображения и строковый адрес изображения.
Подробнее в в этом всеобъемлющем примере.
Ответ 2
Это объяснение, потому что я видел вещи, сделанные в коде, которые честно сбивают с толку - я думаю, что следующий пример может помочь другим.
Как уже говорилось ранее, 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);
Приятно, что вы можете нарисовать объект imgGood с помощью объекта Graphics
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!
Ответ 3
Изображение предоставляет абстрактный доступ к произвольному изображению, он определяет набор методов, которые можно логически применять при любой реализации Image. Он не ограничен каким-либо конкретным форматом изображения или реализацией. Bitmap - это конкретная реализация для абстрактного класса изображения, который инкапсулирует объект растрового изображения Windows GDI. Растровое изображение - это всего лишь конкретная реализация для абстрактного класса изображения, который ретранслирует по объекту растрового изображения GDI.
Вы можете, например, создать собственную реализацию для абстрактного изображения, наследуя из класса Image и реализуя абстрактные методы.
Во всяком случае, это просто простое базовое использование ООП, его не должно быть трудно поймать.