Есть некоторые 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
не должна правильно сохранять эти файлы при прохождении через нее. Синее изображение появляется не на всех файлах, а только на некоторых случайных партиях за один раз. Программа обрабатывает тысячи товаров, поэтому возможны тысячи изображений.