OGeek|极客世界-中国程序员成长平台

标题: ios - C4裁剪图像发生了一些奇怪的事情 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 15:52
标题: ios - 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. origin(x和y坐标)不是从左上角开始,而是从左下角开始,然后高度上升而不是下降。

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

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

我实际上想知道这个函数到底有什么用处......似乎进入原始图像数据以裁剪图像的某些部分实际上更有意义,而不必猜测哪个该区域已被裁剪/蒙版,以便我知道图像实际保留在哪里...

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



Best Answer-推荐答案


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

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

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

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

最后,您发现了一个错误。我已将其列在此处进行修复:

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

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

关于ios - C4裁剪图像发生了一些奇怪的事情,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19512813/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4