ImagePut —— 裁剪、缩放 & 其他选项

AkiChase大约 3 分钟

注意

本文仅仅翻译Crop, Scale, & Other Flags · iseahound/ImagePut Wiki (github.com)open in new window,可能存在不准确的地方,仅供参考,请以原 wiki 文档为准。

剪裁、缩放和其他标志

用法

指定为对象键以覆盖所有可能的输入。image

ImagePutWindow({image: "cats.jpg", scale: 2})

或使用 特定的数据类型,例如:file

ImagePutWindow({file: "cats.jpg", scale: 2})

剪裁 Crop

传递一个 [x、y、w、h] 数组。所有四个成员都是必需的。

; 剪裁到从 (100, 100) 处开始的 250 x 250 像素的图像。
ImagePutWindow({image: "cats.jpg", crop: [100, 100, 250, 250]})

任何负值都会被解释为“从边缘开始”。宽度和高度分别对应右边和下边。

; 从每个边缘裁剪 10 像素。
ImagePutWindow({image: "cats.jpg", crop: [-10, -10, -10, -10]})

如果这些值中有任何一个是百分比,它们应该作为字符串输入。

; 从每个边缘裁剪 10%。
ImagePutWindow({image: "cats.jpg", crop: ["-10%", "-10%", "-10%", "-10%"]})

指定的剪裁数组比原始文件大不会发生什么。将忽略超出边界的值。

缩放 Scale

传递一个正实数。缩放算法使用 GDI+ HighQualityBicubic。

; 缩放倍数为2.5倍。
ImagePutWindow({image: "cats.jpg", scale: 2.5})

要缩放到特定的宽度和高度,请使用 2 成员数组。宽度和高度必须是整数值。

; 调整大小为640 x 480。
ImagePutWindow({image: "cats.jpg", scale: [640, 480]})

要计算缺失的边,请使用大小数组,并将参数替换为任何字符串。这将保持原始纵横比。

; 缩放高度为480像素。
ImagePutWindow({image: "cats.jpg", scale: ["", 480]})
ImagePutWindow({image: "cats.jpg", scale: ["auto", 480]}) ; 更易于理解。

解码 Decode

当设置为 true 时,禁用快速流转换。影响:pdf、url、file、stream、randomaccessstream、base64 和 hex。默认值为 false。

启用此标志将删除原始文件编码,包括原始文件格式的任何压缩增益。这可能有助于验证像素数据的内容,否则将保持未检查状态。会降低转换速度。

; 图像将解码为像素数据并重新编码为 PNG。
str := ImagePutBase64({image: "cats.jpg", decode: True})

; 设置全局解码标志。
ImagePut.decode := True ; 默认值为 false。

验证 Validate

立即通过将位图加载到内存中检查像素数据。将来,这可能会检查流数据的标头。

如果调用:ImagePutBitmap

  • 如果启用,则对位图调用:GdipValidateImage
  • 强制将图像加载到内存中。(糟糕:增加了峰值内存使用量。)
  • 避免返回对图像数据的引用。(好:防止多个引用导致数据竞争。)
  • 避免通过读取时复制或写入时复制实现延迟渲染。(好:立即加载图像数据可防止将意外修改复制。)
  • 附带的一项副作用是立即将图像加载到内存中,意味着对原始图像数据的任何修改都不会被复制过来。
  • 修复了一种罕见的错误,即位图克隆的位图克隆(2 层引用)在从流中解码图像时可能会导致数据竞争。
  • 当返回 GDI+ 位图时,建议将此标志设置为 true,因为在位图的立即创建之后的任何时候调用都会导致秘密失败。validate``GdipValidateImage``GdipValidateImage

默认值为 false,这意味着在需要时拉取像素数据,以节省内存并加快速度。除非满足上述条件,否则不需要将此标志设置为 true。

; 立即将 cats.jpg 加载到内存中。
pBitmap := ImagePutBitmap({image: "cats.jpg", validate: true})

; 设置全局验证标志。
ImagePut.validate := True ; 默认值为 false。