【问题标题】:How can I operate on a size_t and end up with a CGFloat?如何对 size_t 进行操作并最终得到 CGFloat?
【发布时间】:2012-01-06 15:45:03
【问题描述】:

为了确定缩放图像的比例,我使用了以下代码(借用自 Trevor Harmon's UIImage+Resize):

CGFloat horizontalRatio = 600 / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600 / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);

600 代表我想要的缩放图像的最大尺寸。 CGImageGetWidth 和 CGI​​mageGetHeight 返回一个 size_t,根据 ARC,它在 iPhone 平台 (iOS 5) 上计算为 unsigned long。 当前代码的问题是比率始终评估为 0.0000。 imageRef的宽高实际上是w=768,h=780,所以比例应该是MAX(0.781, 0.769) = 0.78。我该怎么做?

附:当我将上面的代码用于 UIImage 的 initWithCGImage:scale:orientation: 时,我发现比例的工作方式与我预期的不同:以 0.78 enlarged 的比例传递图像。将宽度或高度除以所需的大小(如 CGImageGetWidth(imageRef) /600 等)解决了问题。

【问题讨论】:

  • 你试过 600.0 iso 600... 制作 float/float = float 吗?

标签: ios ios5 size-t cgfloat


【解决方案1】:

您需要一个值作为浮点数才能进行正确的除法。整数除法总是截断浮点数。最简单的解决方案是将数字转换为浮点字面量。

CGFloat horizontalRatio = 600.0f / CGImageGetWidth(imageRef);
CGFloat verticalRatio = 600.0f / CGImageGetHeight(imageRef);
CGFloat ratio = MAX(horizontalRatio, verticalRatio);

【讨论】:

  • 这是在另一篇文章中使用 f 后缀的意思吗?一个人每天都会学到一些东西。谢谢,我会尽快接受答案(出于某种原因,必须等待五分钟)。
  • 是的,默认情况下 600.0 是一个双精度字面值,而 600.0f 是一个浮点数字面量。
  • 顺便说一句,但 CGFloat 是 64 位的双精度浮点数,因此在这种情况下指定浮点数没有多大意义...
猜你喜欢
  • 1970-01-01
  • 2021-06-19
  • 2021-11-25
  • 2018-01-24
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多