首页 > 解决方案 > 我可以将使用 libjpeg 的 jpeg 解压的输出设置为一定的宽度和高度吗?

问题描述

我想解码一个 jpeg 图像,我正在使用 libjpeg 这样做。流程为:Input image -> Option 1.Resize+decode, Option 2.decode+resize->output

在上述流程中,我应该选择什么?

我可以将输出的解压缩图像调整为特定的宽度和高度,例如 416x416?

旁注:在浏览文档时,我遇到了参数 output_width 和 output_height,我可以修改这些吗?我所指的文档:DOC Lines : 631-641

标签: cimage-processinglibjpeg

解决方案


是的,您可以在解压缩图像时缩放图像,但只能通过其实际尺寸的倍数(或子倍数)。

无论如何它可能很有用,我就是这样使用它的。我想生成更大图片的缩影(拇指),所以我选择了可​​用的最小尺寸;输出更小,内存更少,要处理的像素更少以调整大小,并且根据情况甚至解码步骤可以更快。

我手头没有这些资源,但我可以在今晚搜索以提供更多详细信息。

-- 更新 -- 我在我的旧资源(pascal)中发现了以下内容:

  cinfo.scale_num := 1;
  cinfo.scale_denom := 1;   { 1:1 scaling }
  ...
  cinfo.two_pass_quantize := TRUE;

  { Step 5: Start decompressor }

  jpeg_start_decompress(@cinfo);

如您所见,解压缩时应用了缩放工具;据我所知,它在要求原始图像的 1/2、1/4、1/8 等时效果很好。

在另一个程序中,我发现:

  sc := round(width/IconRect.right/(fmOptions.cbThumbQuality.ItemIndex+1));
  if sc>ord(jsEighth) then sc := ord(jsEighth);
  scale := TJpegScale(sc);

上面的代码片段计算了将原始图像缩小多少以获得“图标”(或微型)宽度,但将缩放限制为 1/8:我记得,但我不确定,这个限制来自 jpeg 库. 另一方面,jpeg 库已经发展,也许它现在具有更多功能。

因此,总而言之,您可以设置缩放模式,但不能设置最终尺寸;设置比例后,output_width将反映最终宽度,无论如何这是为库的解压缩例程分配内存所必需的。

希望能帮助到你。


推荐阅读