Ios GPUImageMotionBlurFilter和具有透明度的图像

Ios GPUImageMotionBlurFilter和具有透明度的图像,ios,gpuimage,Ios,Gpuimage,我正在尝试将GPUImageMotionBlurFilter应用于UIView的快照。我还想模糊视图的上边缘和下边缘,因此在传递给drawViewHierarchyInRect:AfterScreenuUpdate:的矩形上下都留有一个透明的空间(insetY)。GPUImage似乎忽略了透明度,就像它填充的颜色比-lightGrayColor稍浅一样 这是我的代码(它位于UIView子类中的一个方法中): 下面是我得到的: 快照图像: 模糊图像: 我想做的是可能的吗?这看起来像是预先计算的

我正在尝试将
GPUImageMotionBlurFilter
应用于
UIView
的快照。我还想模糊视图的上边缘和下边缘,因此在传递给
drawViewHierarchyInRect:AfterScreenuUpdate:
的矩形上下都留有一个透明的空间(
insetY
)。GPUImage似乎忽略了透明度,就像它填充的颜色比
-lightGrayColor
稍浅一样

这是我的代码(它位于
UIView
子类中的一个方法中):

下面是我得到的:

快照图像

模糊图像


我想做的是可能的吗?

这看起来像是预先计算的alpha的问题。这样的模糊过滤器分别基于每个RGBA通道计算模糊,因此alpha独立于其他颜色。若你们的透明区域有一个黑色的RGB值,当和其他颜色混合时,它会像这样呈现灰色。当在白色背景上与alpha混合时,它是否仍然显示为灰色,而不仅仅是在QuickLook中?当在白色背景上的
UIImageView
中显示时,它看起来完全相同;我不确定你是不是那个意思,但这正是我想要实现的。我用
UIImagePNGRepresentation
bluredimage
保存到一个文件中,也许它对您有用:而且,如果首先用黑色或白色(均为alpha=0.0)填充背景(使用
CGContextFillRect
),则
bluredimage
看起来是一样的。您可以将透明区域的RGB值设置为与图像背景相同的粉红色吗?看起来这些区域的RGB值是黑色的,或者被拉入为黑色。然后,混合使用该黑色作为透明区域的颜色,在混合时使图像变暗。同样,我独立处理模糊的每个颜色通道,因此在这些计算中使用透明区域的RGB值。@BradLarson:我尝试将透明区域设置为:
[uicolorWithred:0.886 green:0.847 blue:0.812 alpha:0.0]
,但输出与以前相同。填充应用正确,因为我还尝试将alpha设置为1。为了确保我们在同一页上,以下是我试图实现的目标:从到(屏幕截图来自Pixelmator)。@BradLarson:这是增加插入的输出图像:在这里更容易看到模糊是如何消失的。
CGFloat insetX = 0;
CGFloat insetY = 10;
CGRect snapshotFrame = CGRectInset(self.bounds, -insetX, -insetY);

UIGraphicsBeginImageContextWithOptions(snapshotFrame.size, NO, 0.0f);
[self drawViewHierarchyInRect:CGRectMake(insetX, insetY, CGRectGetWidth(self.frame), CGRectGetHeight(self.frame)) afterScreenUpdates:YES];
UIImage *snapshotImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

GPUImageMotionBlurFilter *motionBlurFilter = [[GPUImageMotionBlurFilter alloc] init];
motionBlurFilter.blurAngle = 90;
motionBlurFilter.blurSize = 20.0f;

UIImage *blurredImage = [motionBlurFilter imageByFilteringImage:snapshotImage];