C4裁剪图像发生了一些奇怪的事情

时间:2013-10-22 08:31:57

标签: ios image crop c4

我认为这会很直接,但似乎不是。

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

#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
    CGRectMake的
  1. 原点(x和y坐标)不是从左上角开始,而是从左下角开始,高度向上而不是向下。

  2. 裁剪图像的尺寸实际上与原始图像相同。我想图像并没有真正被裁剪但只被掩盖了?

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

  4. 我实际上想知道这个函数在这个问题上是如何有用的......似乎进入原始图像数据来裁剪图像的某些部分实际上更有意义,而不是必须猜测区域被裁剪/蒙面,以便我知道图像到底在哪里......

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

1 个答案:

答案 0 :(得分:1)

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

1)crop:方法实际上是使用Core Graphics完成的实现,并且专门在原始图像上运行Core Image过滤器(CIFilter)。核心图形中(0,0)的位置位于图像的左下角角落。这就是原产地关闭的原因。

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

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

最后,你发现了一个错误。我列出了它在这里修复:

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

我相信很多混乱的原因是我在最初处理不是视网膜的设备/模拟器时为C4Image构建了过滤方法。我没有机会重新审视这些是如何构建的,之前对此问题也没有任何疑问!