3

假设我有一个 100x100 的图像。我想将图像放置在 500x500 的较大画布上。

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

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

这很好用,但它并没有我想要的那么快。我注意到 CIFilter 非常快。 有没有一种方法可以使用 CIFilters 将图像放置在更大的画布上,或者使用 GPU 而不是 CPU 的另一种方法? 我已经尝试过 CIFilters CICrop 和 CIPerspectiveTransform 但我似乎无法得到我想要的结果......

在此处输入图像描述
原始图像 100x100

在此处输入图像描述

我想要的结果图像为 500x500。我只是想使用 CIFilters 或一些 GPU 操作来获取图像并增加它的画布大小。

我尝试使用 CICrop 进行“反向裁剪”,但没有奏效。请注意,即使图像本身是 100x100,我也将 CIVector 的大小指定为 500x500,结果图像完全忽略了多余的空间,如果关闭则将其截断。这是我的代码:

        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);
4

1 回答 1

4

裁剪过滤器不会满足您的目的 - 您无法使用裁剪过滤器缩放输入图像的大小。来自维基百科:裁剪是指去除图像的外部部分以改善取景、突出主题或改变纵横比。

你需要的是一个比例过滤器。要使用 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
于 2013-05-01T10:46:16.927 回答