Ändern der Größe eines Bildes mit stretchableImageWithLeftCapWidth
Ich versuche, um die Größe eines Bildes mit stretchableImageWithLeftCapWidth: es funktioniert auf dem simulator, sondern auf dem Gerät, vertikale grüne Balken angezeigt wird.
Ich habe versucht, zu verwenden imageNamed, imageWithContentOfFile und imageWithData lo laden Sie die Bilder, die es nicht ändern.
UIImage *bottomImage = [[UIImage imageWithData:
[NSData dataWithContentsOfFile:
[NSString stringWithFormat:@"%@/bottom_part.png",
[[NSBundle mainBundle] resourcePath]]]]
stretchableImageWithLeftCapWidth:27 topCapHeight:9];
UIImageView *bottomView = [[UIImageView alloc] initWithFrame:CGRectMake(10, 200+73, 100, 73)];
[self.view addSubview:bottomView];
UIGraphicsBeginImageContext(CGSizeMake(100, 73));
[bottomImage drawInRect:CGRectMake(0, 0, 100, 73)];
UIImage *bottomResizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
bottomView.image = bottomResizedImage;
Sehen das Ergebnis: die grünen Balken nicht da sein sollte, Sie nicht erscheinen auf dem simulator.
alt-text http://www.quicksnapper.com/files/5161/96232162149F1C14751048_m.png
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hast du das herausgefunden?
Scheint, wie es möglicherweise ein Fehler mit UIGraphicsGetImageFromCurrentImagecontext. Wenn ich zeichnen Sie ein Bild mit Transparenz bekomme ich rote/grüne Artefakte. Diese erscheinen nur auf dem Gerät (nicht auf der sim). Auch, wenn ich entfernen Sie die Transparenz aus dem Bild, die Artefakte Weg.
Update: Einige weitere Seltsamkeit. Ich war mit PNGs vor, also habe ich versucht, mit einen transparenten gif statt. Mit einem GIF, zeigt das Artefakt, das problem auf die sim-Karte.
Sieg! Eine Lösung gefunden:
Ausschalten 'Komprimieren PNG-Dateien in den build-Einstellungen für Ihr Projekt. Deaktivieren das macht die PNG-Transparenz der Arbeit ohne Artefakte.
Scheint es, wie Sie schreiben eine Menge unnötiger code, aber vielleicht nur, weil es aus dem Zusammenhang und es ist mehr, dass ich vermisst.
Bekommen das Bild:
Welchen Teil von deinem code zeigst du dieses Bild? d.h. in dem, was den Aufruf der Methode ziehen Sie die Bilder oben?
Warum man nicht einfach ein UIImageView und setzen Sie das Bild dort? Dann brauchen Sie nicht zu tun, alle des Bildes Kontext Zeichnung etc.
In meinem Fall hatte ich ein UIImageView, die ich horizontal gestreckt. Fand ich eine seltsame vertikale weiße Linie in der gestreckten Bild.
Die oben genannten Lösungen nicht funktioniert hat für mich. Jedoch, die folgenden haben:
Besetzung der width-Wert zu einem int-Wert:
Hoffe, es funktioniert für Euch auch...
Habe ich 5 Stunden debugging dieser letzten Nacht, die Deaktivierung der PNG-Kompression in xcode nichts für mich.
Für jemand anderes zu treffen senkrechte, grün, Balken/Linien/Artefakte mit stretchableImageWithLeftCapWidth (in UIImage-API) - dieser Beitrag ist für Sie.
Ich habe einen 21x30 für eine benutzerdefinierte barbutton hintergrund, dass ich möchte, zu erweitern, bekam aber die gleichen grünen Streifen, da der OP. Ich fand ein PNG erstellt mit photoshop und das funktionierte gut - meine sind gemacht mit Gimp.
Trotzdem, Strippen ALLE Stücke aus den Dateien (außer den drei gebräuchlichsten) kein Unterschied gemacht. Weder hat das deaktivieren der PNG-Kompression.
Was hat Arbeit für mich war dieser:
[Bild drawInRect:CGRectMake(0,-2,Breite,32)];
Dies macht das problem Weg (für mich).
Ich gehe davon aus, dass der Fehler/Problem zu tun hat, mit nicht vertikal zu skalieren, wenn die Zeichnung, so dass ich Kraft Skalierung der erste source-image-Zeile (in zwei Zeilen), die Auslosung vor meiner Komposition.
Ich hoffe, das jemand hilft sparen Sie 5 Stunden.
/Krisb
Ich nicht mehr mit stretchableImageWithLeftCapWidth zu Gunsten von UIView ist viel mehr gut erzogene contentStretch Eigenschaft. Ich habe nie gesehen, die grünen Balken, das Sie beschreiben, aber im Allgemeinen würde ich empfehlen, mit contentStretch statt stretchableImageWithLeftCapWidth.
Habe ich versucht zu deaktivieren, PNG-Kompression, wie Nate vorgeschlagen, aber dies würde nicht für mich arbeiten (iOS 3.1.3). Ich habe dann versucht, mit Hilfe von Bildern im TIFF-Format statt PNG, das funktioniert.
Ich habe ähnliche Probleme mit contentStretch (auf jede UIView, die Sie gezeichnet hat Inhalt), wenn Sie einen Wert von (0.5, 0.5, 0, 0). d.h. die Strecke, auf der Mitte pixel.
Habe ich festgestellt, dass nur das iphone 3G (möglicherweise 2G) zeigt dieses problem. iphone 4 und 3GS ist OK. Also, ich nehme an, dies ist ein problem mit der alten Grafik-HW.
einer Weise, die ich gefunden, um das problem war die Strecke auf einem etwas größeren center-Bereich.
z.B. (0.4, 0.4, 0.1, 0.1)