9 Stimmen

iPhone: UIImage verwischen

In meiner iPhone-Anwendung habe ich eine schwarz-weiße UIImage . Ich muss das Bild unscharf machen (Gaußscher Weichzeichner wäre gut).

Das iPhone weiß eindeutig, wie man Bilder verwischt, denn das macht er, wenn er Schatten zeichnet .

Allerdings habe ich in der API nichts dazu gefunden.

Muss ich die Unschärfe von Hand und ohne Hardware-Beschleunigung vornehmen?

15voto

dom Punkte 11674

Versuchen Sie dies (gefunden aquí ):

@interface UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur;
@end

@implementation UIImage (ImageBlur)
- (UIImage *)imageWithGaussianBlur {
    float weight[5] = {0.2270270270, 0.1945945946, 0.1216216216, 0.0540540541, 0.0162162162};
    // Blur horizontally
    UIGraphicsBeginImageContext(self.size);
    [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
    for (int x = 1; x < 5; ++x) {
        [self drawInRect:CGRectMake(x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
        [self drawInRect:CGRectMake(-x, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[x]];
    }
    UIImage *horizBlurredImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    // Blur vertically
    UIGraphicsBeginImageContext(self.size);
    [horizBlurredImage drawInRect:CGRectMake(0, 0, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[0]];
    for (int y = 1; y < 5; ++y) {
        [horizBlurredImage drawInRect:CGRectMake(0, y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
        [horizBlurredImage drawInRect:CGRectMake(0, -y, self.size.width, self.size.height) blendMode:kCGBlendModePlusLighter alpha:weight[y]];
    }
    UIImage *blurredImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    //
    return blurredImage;
}

Und verwenden Sie es so:

UIImage *blurredImage = [originalImage imageWithGaussianBlur];

Um eine stärkere Unschärfe zu erzielen, wenden Sie diesen Effekt einfach zweimal oder öfter an :)

6voto

tomsoft Punkte 4268

Nachdem Sie in der Vergangenheit das gleiche Problem hatten, überprüfen Sie diese Lib:

https://github.com/tomsoft1/StackBluriOS

Außerdem sehr einfach zu bedienen:

UIImage *newIma=[oldIma stackBlur:radius];

2voto

waterforest Punkte 154

Ziehen Sie in Erwägung, die Aufgabe über CIFilter anzugehen:

Entwicklung von Kernbildfiltern für iOS

0voto

GeneCode Punkte 7256

Im Grunde gibt es keine einfache API, um den Weichzeichner-Effekt zu implementieren. Sie müssen die Pixel verarbeiten, um dies zu erreichen.

Das iPhone zeichnet Schatten mit Hilfe eines Farbverlaufs und nicht durch Unschärfe.

0voto

Mirkules Punkte 1709

Um ein Bild unscharf zu machen, würde man eine Faltungsmatrix verwenden. Hier ist die Beispielcode um eine Faltungsmatrix anzuwenden, und hier ist eine Übersicht über Faltungsmatrizen sowie einige Beispielmatrizen (einschließlich Weichzeichner und Gaußscher Weichzeichner).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X