我是Swift的新手。我使用高斯模糊效果在Sketch中创建了模糊的UI:
现在我想在UIImageView中实现这个效果。
可以使用模糊或CIFilter的视觉效果来达到同样的效果吗? (我已经尝试但没有得到它。可能是我错过了什么)
更新
好的..请到@firstinq。我打开了他的link并意识到我正在使用kCIInputRadiusKey而不是inputRadius。现在我在模拟器中取得了成功,但在真正的iOS设备中,它仍然是混乱的。
以下是模拟器(iPhone SE)中的屏幕截图:
但在真实的iOS设备(iPhone SE)中:
以下是模糊图片的代码:
public Form1()
{
InitializeComponent();
}
string[,] Quest = new string[10, 4];
string[,] Ans = new string[10, 2]; // in this array error was raising
int i = -1;
private void Form1_Load(object sender, EventArgs e)
{
Quest[0, 0] = "Which one of these stores more data than a DVD ? ";
Quest[0, 1] = "CD Rom ";
Quest[0, 2] = "Floppy";
Quest[0, 3] = "Blue Ray Disk ";
Quest[1, 0] = "Eight Bits make up a ";
Quest[1, 1] = "byte ";
Quest[1, 2] = "megabyte";
Quest[1, 3] = "kilobyte ";
Quest[2, 0] = "The printed output from a computer is called ";
Quest[2, 1] = "Copy ";
Quest[2, 2] = "Soft Copy ";
Quest[2, 3] = "Hard Copy ";
Quest[3, 0] = "Which one of these also known as read/write memory ? ";
Quest[3, 1] = "ROM";
Quest[3, 2] = "RAM";
Quest[3, 3] = "DVD ";
Quest[4, 0] = "To apply center alignment to a paragraph we can press ";
Quest[4, 1] = "Ctrl + S ";
Quest[4, 2] = "Ctrl + C ";
Quest[4, 3] = "Ctrl + E ";
Quest[5, 0] = "We can insert a page number at ";
Quest[5, 1] = "Header ";
Quest[5, 2] = "Footer ";
Quest[5, 3] = "Both A and B ";
Quest[6, 0] = "Which one can be used as watermark in a word document";
Quest[6, 1] = "Text";
Quest[6, 2] = "Image";
Quest[6, 3] = "Both A and B ";
Quest[7, 0] = "HTML is used to create ";
Quest[7, 1] = "machine language program ";
Quest[7, 2] = "high level program ";
Quest[7, 3] = "web page ";
Quest[8, 0] = "The computer jargon - WWWW, stands for : ";
Quest[8, 1] = "World Wide Web Worm ";
Quest[8, 2] = "World Wide Wildlife Web ";
Quest[8, 3] = "World Wide Women's Week";
Quest[9, 0] = "Which one of the following is not a search engine? ";
Quest[9, 1] = "Bing ";
Quest[9, 2] = "Google ";
Quest[9, 3] = "Windows";
Ans[0, 0] = "Blue Ray Disk ";
Ans[1, 0] = "byte ";
Ans[2, 0] = "Hard Copy ";
Ans[3, 0] = "RAM";
Ans[4, 0] = "Ctrl + E ";
Ans[5, 0] = "Both A and B ";
Ans[6, 0] = "Both A and B ";
Ans[7, 0] = "web page ";
Ans[8, 0] = "World Wide Web Worm ";
Ans[9, 0] = "Windows";
timer1.Enabled = true;
button1.Enabled = false;
}
private void timer1_Tick_1(object sender, EventArgs e)
{
i = i + 1;
if (i == 9)
{
timer1.Enabled = false;
button1.Enabled = true;
}
else
{
radioButton1.Checked = false;
radioButton2.Checked = false;
radioButton3.Checked = false;
textBox1.Text = Quest[i, 0];
radioButton1.Text = Quest[i, 1];
radioButton2.Text = Quest[i, 2];
radioButton3.Text = Quest[i, 3];
}
}
private void radioButton1_CheckedChanged_1(object sender, EventArgs e)
{
Ans[i, 1] = radioButton1.Text;
}
private void radioButton2_CheckedChanged_1(object sender, EventArgs e)
{
Ans[i, 1] = radioButton2.Text;
}
private void radioButton3_CheckedChanged_1(object sender, EventArgs e)
{
Ans[i, 1] = radioButton3.Text;
}
private void button1_Click_1(object sender, EventArgs e)
{
int j;
int count = 0;
for (j = 0; j < 9; j++)
{
if (Ans[j, 0] == Ans[j, 1])
count += 1;
}
MessageBox.Show("You have shocred" + count + " marks");
}
}
我在collectionView项目中使用了两个图像。一个图像模糊,在它上面,另一个图像是完全可见的。模糊图像尺寸为125x125(高斯模糊将减小此尺寸)。和 可见图像尺寸为50x50。两个图像都有圆角半径,使它们成圆形。
答案 0 :(得分:1)
我不知道这是不是你想要的,但高斯模糊实际上需要整个图像来制作一个新图像。鉴于此,我假设您只想要imageView的内容视图中的裁剪图像。 因此,首先您必须使用以下方法捕获视图中的图像:(我建议使用UIView的扩展名)
public static func image(from view: UIView) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsGetCurrentContext() {
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
}
return nil
}
所以,现在你有了想要的图像,这次我们应该高斯模糊它: (再次,我更喜欢使用扩展,但这次是UIImage)
func getImageWithBlur() -> UIImage?{
let context = CIContext(options: nil)
guard let currentFilter = CIFilter(name: "CIGaussianBlur") else {
return nil
}
let beginImage = CIImage(image: self)
currentFilter.setValue(beginImage, forKey: kCIInputImageKey)
currentFilter.setValue(6.5, forKey: "inputRadius")
guard let output = currentFilter.outputImage, let cgimg = context.createCGImage(output, from: output.extent) else {
return nil
}
return UIImage(cgImage: cgimg)
}
然后你可以使用比前面的UIImageView更小的zPosition设置另一个UIImageView,并且前面的UIImageView有更多的比例。
我也遇到了这个问题,并且我能够正确地获得此效果,但是打印方法太昂贵了,它会减慢您在集合/表格视图中的滚动速度。所以我无法在我的项目中使用它,但随意尝试在你的项目中使用它!