Frage

Ich bin Dreh mein Bild mit dem folgenden Code:

CGAffineTransform rotate = CGAffineTransformMakeRotation( [ratio floatValue] );
[imageView setTransform:rotate];

Aber es hat keine scharfen Kanten, weiß jemand eine Lösung für dieses?

Hier ist das Bild, das ich bekommen:

eingeben Bild Beschreibung hier

War es hilfreich?

Lösung

Die Ränder des Bildes selbst gezackt aussehen, weil sie direkt in ein Pixelgitter platziert wird und nicht interpoliert werden. Nearest Neighbor Interpolation ist die einfachste Art der Interpolation, wo, wenn Sie Pixelraster A haben und Sie Ihr Bild Pixelraster B bewegen, werden die Pixel in Raster B einfach durch die Wahl des nächsten Pixels von Raster A. Andere Formen der Interpolation wählen einen gewichteten Durchschnitt der nächsten Pixel auf dem Pixelwert in Gitter B ankommen gewählt.

Ihr Bild mit seinen gezackten Kanten, sieht aus wie es nächste Nachbar-Interpolation verwendet, die den Standardtyp der Interpolation auf einem affinen auf einem iPhone umwandeln können.

Wenn Sie eine andere Interpolationsverfahren andere als nächsten Nachbarn, die Sie erhalten Aliasing Effekte, wo der Unterabtastungs nicht perfekt ist, wie Sie von einem Pixelraster auf einem anderen übertragen. Dieser Effekt macht Kanten im Bild selbst scheinen unschärfer als sie es sonst tun würde.

Andere Tipps

Das CALayer des UIImageView Mit dem Bild rastern das beste Anti-Aliasing liefern.

imageView.layer.shouldRasterize = YES;

nur 1px transparent Grenze zu Ihrem Bild hinzufügen

CGRect imageRect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext( imageRect.size ); 
[image drawInRect:CGRectMake(1,1,image.size.width-2,image.size.height-2)];
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Immer, wenn Sie wandelt auf ein Bild machen (außer in 90 ° -Schritten) etwas weichere Kanten aufgrund Bildpunktinterpolation verursachen wird.

Es gibt einen Schlüssel, den Sie in Info.plist festlegen können, Anti-Aliasing der Kanten ermöglicht. UIViewEdgeAntialiasing

Wie in der folgenden Antwort beschrieben:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top