2012-04-28 38 views
0

我有一張非常大的圖像,我想顯示200x200px的縮略圖(顯示圖像的一部分,而不是整個圖像的拉伸版本)。爲了實現這一點,我正在研究使用CIImage.ImageByCroppingToRect或CICrop - 但我無法獲得任何有用的東西。無論結果就是黑(我假設我看到的是裁剪圖像的黑色部分),或我得到一個SIGABRT(「無法處理(6000 X 3000)大小的紋理與給定GLES背景!」)在MonoTouch中用CIImage.ImageByCroppingToRect或CICrop裁剪圖像

這個線程中有一個ObjC示例: Cropping CIImage with CICrop isn't working properly

但是我還沒有設法將它翻譯成C#並讓它正常工作。

+0

我很困惑。我認爲這是一個iPhone問題,但你想要一個C#解決方案? – 2012-04-28 09:16:58

+1

@Jeshua - MonoTouch是iOS的C#框架。 – Jason 2012-04-28 11:57:56

回答

3

下面是從後你所提到的答案的MonoTouch的端口:

var croppedImaged = CIImage.FromCGImage (inputCGImage).ImageByCroppingToRect (new RectangleF (150, 150, 300, 300));    
var transformFilter = new CIAffineTransform(); 
var affineTransform = CGAffineTransform.MakeTranslation (-150, 150); 
transformFilter.Transform = affineTransform; 
transformFilter.Image = croppedImaged;   
CIImage transformedImage = transformFilter.OutputImage; 
+0

謝謝!該代碼確實可行 - 除非您要裁剪的圖像大於4096x4096,因爲會比SIGABRT來。不確定這是在iOS,MonoTouch,iPhone模擬器或只是我的電腦的限制...... – Johan 2012-04-29 21:01:27

+2

這是設備上的GPU的限制。您可以通過請求CIContext構造中的軟件渲染器來避免使用GPU:CIContext.FromOptions(new CIContextOptions(){UseSoftwareRenderer = true}) – 2012-04-30 01:09:03

+0

謝謝Miguel,但實際返回null而不是有效的CIContext(至少在模擬器 - 我還沒有嘗試過實際的設備)。 – Johan 2012-05-01 08:32:55