.NET C# - растровые изображения и изображения загружают изображения меньше ожидаемого
Я пытаюсь обработать типичные 16-мегапиксельные изображения с современной камеры. При выборе случайного изображения как файловая система, так и мое программное обеспечение для редактирования изображений говорят, что изображение имеет размер 4608 x 3456. Когда я загружаю изображение в C# (VS2013 .Net 4.5), используя либо новое растровое изображение (имя файла), либо Image.FromFile(имя файла), Я получаю изображение успешно загружено. Однако полученное изображение имеет размер 1613 x 1210. Теперь в некоторых случаях я хочу создавать миниатюры нестандартного размера, и это будет работать нормально. Тем не менее, у меня есть еще одна потребность, где я обнаруживаю "ненормальные" ориентации, и я просто хочу перевернуть / повернуть для отображения, а затем сохранить.
Сохранение этих изображений (без каких-либо настроек, просто загрузите и сохраните) создает действительное изображение на диске. Тем не менее, как файловая система, так и мой инструмент для изображений говорят, что размер составляет 1613 x 1210.
Как загрузить полноразмерное изображение и сохранить всю информацию обратно на диск? Есть идеи, что я делаю не так? Я просто хочу повернуть изображение там, где это необходимо, я не хочу уменьшать его!
Вот фрагмент того, что я попробовал, как и было обещано в комментарии ниже:
Bitmap bm = new Bitmap(fileName);
Image jpg = Image.FromFile(fileName);
jpg.Save("e:\\test.jpg");
bm.Save("e:\\test2.jpg");
Оба файла меньше их исходного размера и соответствуют ширине и высоте, которые показывает отладчик для обоих изображений в памяти.
Согласно предложенному ответу, я попробовал этот код, но не увидел различий в результатах:
long width = 0;
long height = 0;
byte[] imageBytes = File.ReadAllBytes(fileName);
using (MemoryStream ms = new MemoryStream(imageBytes))
{
Image jpg3 = Image.FromStream(ms);
width = jpg3.Width;
height = jpg3.Height;
jpg3.Save("e:\\test3.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
}
Заранее спасибо.
[EDIT] Ошибка пользователя из следующего сообщения:
Хотя это правда, у меня есть изображение размера 4608x3456, которое я пытаюсь загрузить, но я выбрал неправильный каталог в OpenFileDialog и фактически выбрал a, как вы уже догадались, версию этого изображения 1613 x 1210. Код был загружен целиком, глупый оператор (я) его запутал.
Перед публикацией попробую полноразмерное изображение... да, все отлично работает.
1 ответ
Можете ли вы показать свой программный код? Я скачал образец изображения размером 5169x3423. Загрузите это изображение с помощью программы, и когда я восстановил его, исходное и новое изображение совпадают.
Я загружаю файл изображения в байтовый массив и сохраняю его в Bitmap.
private Image LoadImage()
{
OpenFileDialog openFile = new OpenFileDialog();
openFile.ShowDialog();
byte[] byteImage = File.ReadAllBytes(openFile.FileName);
Image myImage;
using (var ms = new MemoryStream(byteImage))
{
myImage = Image.FromStream(ms);
}
return myImage;
}
private void SaveImage(Image myImage)
{
Bitmap bmp = new Bitmap(myImage);
// Temp save location
bmp.Save("c:\\test\\myImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}