【问题标题】:Cropping image with CIImage.ImageByCroppingToRect or CICrop in MonoTouch在 MonoTouch 中使用 CIImage.ImageByCroppingToRect 或 CICrop 裁剪图像
【发布时间】:2012-05-08 19:47:31
【问题描述】:

我有一个非常大的图像,我想显示一个 200x200 像素的缩略图(显示图像的一部分,而不是整个图像的拉伸版本)。为了实现这一点,我正在考虑使用 CIImage.ImageByCroppingToRect 或 CICrop - 但我无法获得任何有用的东西。结果要么只是黑色(我假设我看到的是裁剪图像的黑色部分),要么我得到一个 SIGABRT(“无法使用给定的 GLES 上下文处理 (6000 x 3000) 大小的纹理!”)

此线程中有一个 ObjC 示例: Cropping CIImage with CICrop isn't working properly

但我还没有设法将它翻译成 C# 并让它正常工作。

【问题讨论】:

  • 我很困惑。我以为这是一个 iPhone 问题,但你想要 C# 解决方案吗?
  • @Jeshua - MonoTouch 是适用于 iOS 的 C# 框架。

标签: iphone xamarin.ios crop


【解决方案1】:

这是您提到的帖子中答案的 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;

【讨论】:

  • 谢谢!该代码确实有效 - 除非您要裁剪的图像大于 4096x4096,因为 SIGABRT 会出现。不确定这是 iOS、MonoTouch、iPhone 模拟器还是我的电脑的限制......
  • 这是设备上 GPU 的限制。您可以通过在 CIContext 构造中请求软件渲染器来避免使用 GPU: CIContext.FromOptions (new CIContextOptions () { UseSoftwareRenderer = true })
  • 谢谢 Miguel,但实际上返回的是 null 而不是有效的 CIContext(至少在模拟器上 - 我还没有尝试使用实际设备)。
猜你喜欢
  • 2015-11-03
  • 1970-01-01
  • 2012-03-24
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多