.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);
}
Другие вопросы по тегам