Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用GPU(可能是CIFilters)将图像放置在较大的画布上,而不使用图像上下文_C#_Ios_Xamarin.ios_Gpu_Core Image - Fatal编程技术网

C# 使用GPU(可能是CIFilters)将图像放置在较大的画布上,而不使用图像上下文

C# 使用GPU(可能是CIFilters)将图像放置在较大的画布上,而不使用图像上下文,c#,ios,xamarin.ios,gpu,core-image,C#,Ios,Xamarin.ios,Gpu,Core Image,假设我有一个100x100的图像。我想把图像放在一个更大的画布上,大小为500x500 我目前的方法是使用UIGraphics创建上下文,然后将图像绘制到上下文上 UIGraphics.BeginImageContext(....); ImageView.Draw (....); 这很好,但并没有我所希望的那么快。我注意到cifilter非常快是否有一种方法可以使用CIFilters将图像放置在更大的画布上,或者使用GPU而不是CPU的另一种方法???我已经使用CIFilters CICrop

假设我有一个100x100的图像。我想把图像放在一个更大的画布上,大小为500x500

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

UIGraphics.BeginImageContext(....);
ImageView.Draw (....);
这很好,但并没有我所希望的那么快。我注意到cifilter非常快是否有一种方法可以使用CIFilters将图像放置在更大的画布上,或者使用GPU而不是CPU的另一种方法???我已经使用CIFilters CICrop和CIPerspectiveTransform进行了实验,但我似乎无法获得期望的结果


原始图像100x100

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

我尝试使用CICrop进行“反向裁剪”,但没有成功。请注意,我将CIVector的大小指定为500x500,即使图像本身是100x100,结果图像完全忽略了额外的空间,如果关闭,则会被剪切。这是我的密码:

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

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

你需要的是一个比例过滤器。要使用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

我确实了解作物的工作原理。我只是想想出一个聪明的方法,通过使用CIFilters来改变图像的画布大小,因为CI过滤器太快了!规模并不会真正达到我想要达到的目标。“缩放”将缩放整个图像,我希望图像本身保持相同的大小/尺寸,但只有canvase增加(也称为在图像中添加空白或空格…)可以将其视为在photoshop中打开一个100x100的图像,然后将画布大小更改为500x500。@LampShade-对不起,我想我误解了您的问题!我认为您可以通过源代码而不是合成过滤器()来实现所需的功能。Source Over filter背景图像=[CIImage imageWithColor:white];输入图像=您的100X100图像;并将此过滤器连接至500X500作物过滤器。裁剪过滤器的输出应该是您想要的吗?听起来它应该可以工作,但我一直在努力解决的问题是如何将100x100图像精确定位到我想要的位置?源过滤镜后,100x100图像的位置始终为X-0、Y-0。如果我想要X-50,Y-152呢?我似乎无法定位它。。。有什么想法吗?不要担心误会!