我认为这会很直接,但似乎不是。
我在尝试像这样裁剪图像时注意到的事情:
#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的origin(x和y坐标)不是从左上角开始,而是从左下角开始,然后高度上升而不是下降。
裁剪图像的大小实际上与原始图像相同。我想图像并没有真正被裁剪,而只是被蒙版?
不同的比例 在上面的示例中,我实际上没有指定任何比例,但是原始图像和裁剪后的图像没有相同的比例。为什么?
我实际上想知道这个函数到底有什么用处......似乎进入原始图像数据以裁剪图像的某些部分实际上更有意义,而不必猜测哪个该区域已被裁剪/蒙版,以便我知道图像实际保留在哪里...
或者我做错了什么? (我找不到任何关于裁剪图像的示例,所以这就是我所做的......)
Best Answer-推荐答案 strong>
您发现在您的图像上运行的 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/
|