我认为这会很直接,但似乎不是。
尝试裁剪图像时我注意到的事情:
#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
原点(x和y坐标)不是从左上角开始,而是从左下角开始,高度向上而不是向下。
裁剪图像的尺寸实际上与原始图像相同。我想图像并没有真正被裁剪但只被掩盖了?
不同比例在上面的示例中,我实际上没有指定任何比例,但是原始和裁剪的图像不具有相同的比例。为什么呢?
我实际上想知道这个函数在这个问题上是如何有用的......似乎进入原始图像数据来裁剪图像的某些部分实际上更有意义,而不是必须猜测区域被裁剪/蒙面,以便我知道图像到底在哪里......
或许我做错了什么? (我找不到任何关于裁剪图像的例子,所以这就是我制作的......)
答案 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构建了过滤方法。我没有机会重新审视这些是如何构建的,之前对此问题也没有任何疑问!