Почему мне нужно привести растровое изображение к изображению в одном случае, а не в другом? - PullRequest
2 голосов
/ 04 февраля 2011

Bitmap b = (Bitmap)Bitmap.FromFile(path); // требуется кастинг

..Graphics.DrawImage(b,x,y); // не требует приведения, хотя DrawImage принимает только тип Image

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

Bitmap всегда является Image, но не каждый Image является Bitmap;или в терминах класса:

public sealed class Bitmap : Image {...}

Метод в первом фактически унаследован от Image - это действительно вызов:

public static Image FromFile(string path)

, и вынужно утверждать, что это Bitmap, чтобы вставить его в Bitmap переменную.В конце концов, это может быть другой поддерживаемый тип Image - не просто растровое изображение.Предположительно, ваш path указывает на растровое изображение.

Если бы у вас было:

Image img = Image.FromFile(path); // or var img = Image.FromFile(path);
...
Graphics.DrawImage(img,x,y);

, тогда жизнь была бы более ясной.просто хочет, чтобы Image - любой Image сделал;Bitmap хорошо ...

0 голосов
/ 04 февраля 2011

Когда вы звоните Bitmap.FromFile, вы на самом деле звоните Image.FromFile.FromFile не является статическим методом Bitmap, но поскольку Bitmap наследуется от Image, вы также можете получить доступ к методу FromFile через Bitmap.Причина, по которой Bitmap.FromFile возвращает Image, заключается в том, что это FromFile класса Image.

Image.FromFile может загружать изображения различных типов, например типа Bitmap.Вам необходимо привести результат от Image.FromFile к Bitmap, поскольку тип возвращаемого значения Image.FromFile всегда равен Image, независимо от типа загруженного изображения.

Причина, по которой вам не нужно приводитьэто для Graphics.DrawImage, потому что этот метод принимает любой тип изображения, который идет от Image, что Bitmap.

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