2

我认为这将是相当直截了当的,但似乎并非如此。

我在尝试裁剪这样的图像时注意到的事情:

#import "C4Workspace.h"

@implementation C4WorkSpace{
    C4Image *image;
    C4Image *copiedImage;
}

-(void)setup {
    image=[C4Image imageNamed:@"C4Sky.png"];
    //image.width=200;
    image.origin=CGPointMake(0, 20);
    C4Log(@"       image width %f", image.width);
    //[self.canvas addImage:image];

    copiedImage=[C4Image imageWithImage:image];
    [copiedImage crop:CGRectMake(50, 0, 200, 200)];
    copiedImage.origin=CGPointMake(0, 220);
    [self.canvas addObjects:@[image, copiedImage]];
    C4Log(@"copied image width %f", copiedImage.width);
}

@end
  1. CGRectMake 的原点(x 和 y 坐标)不是从左上角开始,而是从左下角开始,然后高度上升而不是下降。

  2. 裁剪图像的大小实际上与原始图像的大小相同。我想图像并没有真正被裁剪,而只是被蒙版?

  3. 不同的比例在上面的例子中我实际上没有指定任何比例,但是原始图像和裁剪图像没有相同的比例。为什么?

我实际上想知道这个功能是如何有用的......似乎进入原始图像数据以裁剪图像的某些部分实际上更有意义,而不是不得不猜测哪个区域已经裁剪/蒙版,以便我知道图像实际保留在哪里......

或者也许我做错了什么?(我找不到任何关于裁剪图像的示例,所以这就是我所做的......)

4

1 回答 1

1

您发现的是crop:在您的图像上运行的过滤器的预期实现中的一个错误。

1)该crop:方法实际上是使用Core Graphics完成的实现,并且专门在您的原始图像上运行Core Image filter(CIFilter)。(0,0) 在 Core Graphics 中的位置是在图像的左下角。这就是原点关闭的原因。

2) 是的。我不确定这是否应该被视为错误或功能,我需要考虑的事情......这实际上与“过滤器”的设计方式有关。

3)由于crop:构建方式的错误,过滤器没有考虑到图像比例应该是2.0的事实,并且它在1.0重新渲染(它不应该这样做)

最后,您发现了一个错误。我在这里列出了它要修复的内容:

https://github.com/C4Framework/C4iOS/issues/110

我相信,造成很多混乱的原因是,当我最初在不是视网膜的设备/模拟器上工作时,我为 C4Image 构建了过滤器方法。我还没有机会重新审视它们是如何构建的,之前也没有关于这个问题的任何问题!

于 2013-10-22T20:33:10.623 回答