【发布时间】:2017-06-02 01:06:24
【问题描述】:
Delphi 的TImage 控件中不显示某些具有以下格式的 JPEG 文件。
- 问题已解决.. [TImage.Autosize] 默认情况下不选中图像控件中的复选框,因此图像未调整大小。我正在处理这个项目.. https://community.embarcadero.com/blogs/entry/converting-to-grayscale-with-tbitmapscanline-property-39051
并将速度与我现有的灰度代码进行比较。他们使用的扫描线过程似乎比我目前使用的扫描线过程稍快。对于使用图像的人来说,这是一个很好的起点。当我遇到问题并注意到文件大小时,我添加了标准的 jpeg 转换代码和滚动框。我相信这个问题是有效的,但我改写了它。如果我找到另一个更容易找到问题的相关答案,我会拉这个帖子。如果没有,我会离开它。
例如,来自尼康数码相机。
尺寸:宽 5184 x 高 3888
垂直分辨率:300 dpi
颜色表示:sRGB
压缩位/像素:2
位深:24
EXIF 版本:0230
属性:N
来自三星手机摄像头:
尺寸:宽 4128 x 高 2322
水平和垂直分辨率:72 dpi
颜色表示:sRGB
分辨率单位:2
压缩位/像素:[空白]
位深:24
EXIF 版本:0220
属性:A
来自 Adobe Photoshop 的灰度文件:
尺寸:宽 1800 x 高 3600
水平和垂直分辨率:300 dpi
颜色表示:未校准
压缩位/像素:[空白]
位深:8
EXIF 版本:[空白]
属性:A
文件格式与上一个文件完全相同,但尺寸要小得多。
一个工作文件的尺寸:宽 570 x 高 248
具有 24 位深度、较小尺寸且没有分辨率或压缩设置的文件也可以正常工作。
当我尝试使用下面的代码显示图片时,失败文件上的图片始终为空白,并且不返回任何错误。它与许多其他 jpg 和 bmp 文件完美配合。
sRGB 格式的文件是否需要转换?控件可以在屏幕上显示的内容是否有大小限制?如果是这样,有没有办法显示更大的文件?
procedure TForm1.btnBrowseClick(Sender: TObject);
var
bmp: TBitmap;
c2g: TColor2Grayscale;
ba: TBitmapAccess;
sw: TStopwatch;
jpg : TJPEGImage; // jpeg does not show 32-bit support in Delphi, only 24 and 8.
path, name, ext : string;
alreadyGray : boolean;
begin
bmp := TBitmap.Create;
jpg := TJPEGImage.Create;
OpenPicturedialog1.InitialDir := FindImageFolder(true);
if OpenPictureDialog1.Execute() then
try
name := OpenPictureDialog1.FileName;
path := ExtractFilePath(name);
ext := Lowercase ( ExtractFileExt(name) );
alreadyGray := false;
try
if ( ext = '.jpg' ) or ( ext = '.jpeg' ) then
begin
jpg.LoadFromFile(name);
bmp.Assign(jpg);
alreadyGray := jpg.Grayscale;
end
else
bmp.LoadFromFile( name );
except
on err: Exception do
begin
ShowMessage(err.Message);
Exit;
end;
end;
if bmp.PixelFormat = pfDevice then
bmp.PixelFormat := pf32bit;
Image1.Picture.Assign(bmp);
if alreadyGray then
begin
Image2.Picture.Assign(bmp);
Exit;
end;
finally
jpg.Free;
bmp.Free;
end;
end;
【问题讨论】:
-
您能否添加指向不起作用的示例 jpg 文件的链接
-
您使用的是哪个版本的 Delphi?
-
我可以确认它甚至在 Delphi 10.1 更新 2 上也不起作用。不过,如果这是一个可接受的解决方法,它可以在 FMX 中工作。
-
10.1 西雅图,我相信。我还没有加载最新的服务包。
-
另请注意。操作系统是Windows 10。虽然我有点怀念Win7的界面,但我觉得10对大多数用户来说更安全。
标签: image delphi bitmap jpeg srgb