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

Posted

技术标签:

【中文标题】C4裁剪图像发生了一些奇怪的事情【英文标题】:C4 cropping image some weird things happening 【发布时间】:2013-10-22 08:31:57 【问题描述】:

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

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

#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(x 和 y 坐标)不是从左上角开始,而是从左下角开始,然后高度上升而不是下降。

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

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

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

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

【问题讨论】:

【参考方案1】:

您发现在您的图像上运行的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 构建了过滤器方法。我还没有机会重新审视它们是如何构建的,之前也没有关于这个问题的任何问题!

【讨论】:

感谢特拉维斯!关于 2:我不会将其称为功能。如果我只想显示图像的一部分,我只会屏蔽该图像但不裁剪它。所以我认为这是一个错误,而不是一个功能。就我而言,我实际上需要在我的应用程序中处理大约 30 个裁剪图像。所以我真的需要裁剪图像。目前我可以看到 2 个解决方法: 1. 制作一个新图像并逐个像素地检查旧图像,只复制我需要的图像。 2. 将图像的一部分保存到应用程序文档目录并从那里重新加载。我会看看这两种方法。稍后会发布新问题 哦。我刚刚看到你实际上已经在这里给了我解决方案:***.com/questions/19490227/c4-saving-part-of-an-image/… 按功能,我的意思是在 C4 的 api 本身中...这是一种设计模式,因为所有过滤器都直接在图像本身上工作...所以crop: 是核心图像的一个功能API 并且可能应该仍然是一个功能,按照现在的方式在 C4 API 中工作......

以上是关于C4裁剪图像发生了一些奇怪的事情的主要内容,如果未能解决你的问题,请参考以下文章

Canvas drawImage:尝试裁剪和拉伸

WPF 图像裁剪

图像的裁剪

如何在裁剪意图期间旋转图像

从图像中裁剪空白

裁剪对于 div 来说太大的图像(或其他对象)