Загрузка изображения файла изображения.FromFile против FileStream
Я должен признать, что я никогда не понимал, что такое потоки - я всегда думал, что это интернет-вещь. Но теперь я сталкиваюсь с кодом, который использовал поток для загрузки файла localy, и мне интересно, есть ли преимущество для использования потока... ну, как я всегда загружал файлы:
private void loadingfromStream()
{
DirectoryInfo dirInfo = new DirectoryInfo("c:/");
FileInfo[] fileInfoArr = dirInfo.GetFiles();
FileInfo fileInfo = fileInfoArr[0];
// creating a bitmap from a stream
FileStream fileStream = fileInfo.OpenRead();
Bitmap bitmap = new Bitmap(fileStream);
Image currentPicture = (Image)bitmap
}
и
private void loadingUsingImageClass
{
Image currentPicture = Image.FromFile(originalPath);
}
4 ответов
Если вы знаю ваш код будет загружать данные из файла, используйте Image.FromFile
- Это, очевидно, довольно простой код, и вполне возможно, что есть оптимизация в рамках, когда он имеет дело с файлами.
использование потока более гибко, но если вы нужно эта гибкость, перейдите к файловому решению.
если вы хотите иметь дело с файлами изображений, конечно, второе решение лучше. В первом разделе, у вас есть Bitmap bitmap = new Bitmap(fileStream);
вы знаете, что файл изображения не всегда растровый, он также может быть JPEG/PNG / TIFF и так далее. В то время как Image.FromFile
является довольно профессиональным для работы с файлами изображений с различными расширениями.
вообще говоря, FileStream
распространен при проблемах с файлами, в то время как Image.FromFile
более конкретно в файлах изображений. Это зависит от того, какие файлы вы собираетесь иметь дело с.
как дополнение к Джонсу ответ:
насколько я вижу, эти два метода не одно и то же. Первый дает вам первое изображение в "C:\"
где второй просто дает вам изображение из пути. Таким образом, добавленная сложность в первом не только потому, что она использует потоки.
Это было бы эквивалентно:
using (var fs = File.OpenRead(path))
using (var img = Image.FromStream(fs))
{
//...
}
и в этом случае, конечно, лучше просто сделать это с Image.FromFile
Как пояснил Джон.
Ну, файл часто рассматривается как поток, а также. Вот почему основной класс для открытия файлов называется FileStream. Но есть определенная функция операционной системы, которая может сделать работу с файлами изображений много более эффективным. Он называется памяти сопоставленных файлов, функция, которая отображает содержимое файла в память. Есть некоторые дым и зеркала, но это по существу делает файл непосредственно доступным без необходимости читать его. Память нужно хранение данных файла не занимает места в файле подкачки.
очень эффективно, вы получите его бесплатно, когда вы используете fromfile () или Bitmap (string) конструктор для изображения в .формат BMP. Загрузка изображения из потока, как правило, требуют два раза объем памяти, всегда проблема с большими изображениями.