Преобразование изображений Jpeg в Bmp - некоторые изображения получаются синими

Есть некоторые Jpg изображения, которые Delphi, похоже, не нравятся. Похоже, что это связано с конкретными файлами, которые я загружаю. А процедура проста - а) загрузить Jpg изображение в TJpegImage, б) присвоить Jpg объект объекту TBitmap, и в) сохранить и/или отобразить Bmp изображение. По какой-то причине эти изображения получаются с голубоватым оттенком.

Эти изображения прекрасно отображаются везде, куда бы я их не загружал (windows picture viewer, paint, photoshop и т.д.).

И то, что я делаю, очень просто...

procedure Load;
var
  J: TJpegImage;
  B: TBitmap;
begin
  J:= TJpegImage.Create;
  B:= TBitmap.Create;
  J.LoadFromFile('C:\SomeFile.jpg');
  B.Assign(J);
  //Either save or display `B` and it appears blueish at this point
....

Я хочу по возможности избежать использования сторонних программ. Эта проблема существовала в Delphi версий 7, 2010 и XE2. По крайней мере, элемент управления TImage в XE2 отображает его правильно (в отличие от двух предыдущих), но это не имеет значения, если TBitmap по-прежнему не работает. Что не так с этим файлом? И/или, что не так с рендерингом Delphi?

Добавлена информация

Недавно я узнал кое-что об этих изображениях. Когда они пришли от поставщиков (изображения продуктов), они были в формате CMYK. В то время Delphi 7 не поддерживала должным образом эти файлы (с нарушениями доступа и плохими изображениями), поэтому все изображения были отфильтрованы через конвертер в цветовой формат RGB. Многие оригинальные изображения также имели формат TIFF и были преобразованы в JPG. Таким образом, похоже, что программа FastStone Image Resizer не должна правильно сохранять эти файлы при прохождении через нее. Синее изображение появляется не на всех файлах, а только на некоторых случайных партиях за один раз. Программа обрабатывает тысячи товаров, поэтому возможны тысячи изображений.

10
задан Triber 7 December 2018 в 12:22
поделиться