使用GPU(可能CIFilters)将图像放在较大的canvas上,而不使用Image Context

比方说,我有一个100×100的图像。 我想将图像放置到500×500的较大的canvas上。

我目前的做法是使用UIGraphics创build一个Context,然后将图像绘制到上下文中。

UIGraphics.BeginImageContext(....); ImageView.Draw (....); 

这很好,但不像我希望的那样快。 我注意到CIFilters速度非常快。 有没有一种方法可以使用CIFilters或使用GPU而不是CPU的另一种方法在较大的canvas上放置图像? 我已经用CIFilters CICrop和CIPerspectiveTransform进行了实验,但似乎无法得到我想要的结果…

在这里输入图像说明
原始图片100×100

在这里输入图像说明

我想要的结果图像在500×500。 我只是想要使用CIFilters或某些GPU操作来增加图像大小。

我尝试使用CICrop做一个“反向作物”,但是这不起作用。 注意我指定了CIVector的大小为500×500,即使图像本身是100×100,结果图像完全忽略了额外的空间,如果closures,剪切。 这是我的代码:

  CICrop crop = new CICrop(); crop.Image = ImageView.Image.CGImage; crop.Rectangle = new CIVector(0, 0, 500, 500); ImageView.Image = new UIImage(crop.OutputImage); Console.WriteLine("ImageView.Image.size = "+ ImageView.Image.Size); 

裁剪filter不会达到您的目的 – 您无法使用裁剪filter缩放input图像的大小。 从维基百科:剪切是指去除图像的外部部分,以改善构图,突出主题或改变纵横比。

你需要的是一个比例filter。 要用CoreImage实现这个,你需要做这样的事情:

 CIImage *input = [CIImage imageWithCGImage: ImageView.Image.CGImage]; // input image is 100 X 100 CGAffineTransform transform = CGAffineTransformMakeScale(5.0f, 5.0f); // Scale by 5 times along both dimensions CIImage *output = [input imageByApplyingTransform: transform]; // output image is now 500 X 500