2013-10-22 49 views
2

我想這將是相當簡單的,但它似乎不是這樣的。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 
  1. 起源CGRectMake(x和y座標)沒有從左上角開始,而是從左下角和高度上升,而不是下降。

  2. 裁剪圖像的尺寸實際上與原始圖像相同。我想這個圖像並不真正被剪裁,而只是被蒙上了一層?

  3. 不同尺度在上面的例子中,我其實並沒有指定任何規模,但原來和裁剪後的圖像不具有相同的比例。爲什麼?

實際上,我不知道這個功能如何能有用在所有然後...看來,這實際上更有意義,進入原始圖像數據裁剪圖像的某些部分,而不是有猜測哪個區域已被剪切/掩蓋,讓我知道確切的圖像實際上依然存在,

也許我做錯了什麼? (我找不到任何修剪圖像的例子,所以這就是我所做的...)

回答

1

你發現的是在你的圖像上運行的crop:濾鏡的預期實現中的一個錯誤。

1)crop:方法實際上是一個使用Core Graphics完成的實現,它專門在原始圖像上運行核心圖像過濾器(CIFilter)。核心圖形中(0,0)的位置位於圖像角落的左下角處。這就是原點關閉的原因。

2)是的。我不確定這是否應該被視爲一個錯誤或功能,這是我想要考慮的事情......這實際上與「過濾器」的設計方式有關。

3)由於構建crop:的方式存在缺陷,因此過濾器沒有考慮圖像比例應該爲2.0的事實,並且它在1.0處重新呈現(並且它不應該這樣做)

最後,你發現了一個錯誤。我列出它被固定在這裏:

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

原因相當的混亂,我認爲,這是我建立了過濾方法C4Image當我上的設備/模擬器最初的工作是不是視網膜。我沒有機會重新審視這些建築是如何建造的,此前也沒有任何關於這個問題的疑問!

+0

感謝特拉維斯!關於2: 我不會稱之爲功能。如果我只想顯示圖像的一部分,我只會屏蔽該圖像,但不會裁剪它。所以我認爲這是一個錯誤,而不是一個功能。 在我的情況下,我實際上需要在我的應用程序中處理大約30幅裁剪後的圖像。所以我真的需要裁剪圖像。目前我可以看到2個解決方法: 1。製作一個新的圖像,逐個像素地瀏覽舊的圖像,只複製我需要的圖像。 2.將圖像的一部分保存到應用程序文檔目錄並從那裏重新加載。 我會看看兩種方法。稍後發佈新問題 – suMi

+0

哦。我剛剛看到你實際上已經給我在這裏的解決方案: http://stackoverflow.com/questions/19490227/c4-saving-part-of-an-image/19528248?noredirect=1#19528248 – suMi

+0

由功能,我意思是C4的api本身......這是一種設計模式,因爲所有的濾鏡都直接在圖像上工作...所以'crop:'是Core Image API的一個特性,應該可以保持一個特徵,工作方式它現在呢,在C4 API ... –

相關問題