Delphi似乎不喜欢一些Jpg图像.它似乎特定于我正在加载的文件.并且过程很简单 - a)将Jpg图像加载到TJpegImage,b)将Jpg对象分配给TBitmap对象,以及c)保存和/或显示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
....
Run Code Online (Sandbox Code Playgroud)
我想尽可能避免收到任何第三方的东西.Delphi版本7,2010和XE2中存在此问题.至少XE2中的TImage控件正确显示它(而不是旧的两个),但是如果TBitmap仍然不起作用则无关紧要.这个文件有什么问题?和/或,Delphi的渲染有什么问题?
添加了信息
我最近发现了一些关于这些图像的东西.当他们来自供应商(产品图片)时,他们采用CMYK格式.那时,Delphi 7没有正确支持这些文件(具有访问冲突和坏图像),因此所有图片都通过转换器过滤为RGB颜色格式.许多原始图像也是TIFF并转换为JPG.因此,软件似乎FastStone Image Resizer无法正常保存这些文件.所有这些都不会发生蓝色图像,一次只能进行一些随机批次.该软件处理数千种产品,因此有数千种可能的图片.
我对Windows Imaging Component(WIC)和GDI +之间的关系模糊不清.我在过去做过一些工作,表明,例如,WIC产生了视觉上优越的GIF编码,但我很惊讶我没有看到更多的人使用它进行图像处理而不是GDI +.我知道它没有GDI +的绘制操作,但对于编码/解码它似乎更优越.那么为什么我们不看迁移呢?