iPhone: die Umwandlung eines Bildes mit Quartz 2D
Ich bin versucht, einige Transformationen auf Bilder mit einem CGContextRef. Ich bin mit CGContextTranslateCTM, CGContextScaleCTM und CGContextRotateCTM Funktionen, sondern um Dinge einfach zu halten, können konzentrieren sich nur auf die erste. Ich Frage mich warum der folgende code erzeugt genau das, das original Bild?! Bin ich etwas fehlt?
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef g = CGBitmapContextCreate((void*) pixelData,
width,
height,
RGBA_8_BIT,
bytesPerRow,
colorSpace,
kCGImageAlphaPremultipliedLast);
CGContextSetShouldAntialias(g, YES);
CGContextSetInterpolationQuality(g, kCGInterpolationHigh);
CGContextTranslateCTM( g,translateX, translateY );
CGImageRef tempImg = CGBitmapContextCreateImage (g);
CGContextDrawImage( g, CGRectMake (0, 0, width, height), tempImg );
CGContextRelease(g);
CGColorSpaceRelease( colorSpace );
Auch, nach dem übersetzen, wie Sie zeichnen ein anderes Bild über diese ein, aber mit teilweiser Transparenz (z.B. alpha = 0.5).
Ich viel gesucht aber nicht finden, eine Antwort, jede Hilfe ist willkommen... 🙂
Bitte beachten Sie, dass Schaffe ich den Kontext, aus pixelData, und dass tempImg erstellt wird, nach der übersetzung. Es ist nichts falsch bei der Initialisierung, als das ursprüngliche Bild wird derzeit produziert, aber das Problem mit der übersetzung, nehme ich an..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Transformationen der Grafik-Staat nur Auswirkungen auf die nachfolgenden Zeichenoperationen - Sie ändern sich nicht die im Bild vorhandenen Daten. Wenn Sie sich bewerben möchten, verwandelt zu einem Bild, probieren Sie etwas wie dieses:
Wenn Sie Schritt 3 ausführen, werden die vorhandenen Bild gezeichnet wird, in Ihrer neuen graphics-Kontext mit den Transformationen angewendet. Der trick hier ist, dass im Hinblick auf die Anwendung der Transformationen, die wir haben, um tatsächlich etwas zeichnen.
Können Sie einige wirklich Coole Dinge mit Transformationen dieser Art und Weise. Ziehen Sie die Hälfte Ihres Bildes, gelten einige verwandelt, und ziehen einige mehr.
Wie bereits in anderen Antworten, Transformationen gelten nur für die nachfolgenden Zeichenoperationen; Sie beeinträchtigen nicht die pixel-buffer, die Sie mit gestartet.
So müssen Sie eine Zeichnung Bedienung. Die Lösung ist erstellen Sie eine CGImage; Zeichnung, Bild ist eine Zeichnung des Betriebs, so wird es Gegenstand der aktuellen Transformationsmatrix (CTM).
Step-by-step:
NULL
für die Puffer, Quarz sollte erstellen Sie für Sie. Das funktioniert auf dem Mac jedenfalls.)Zu nennen CGBitmapContextCreateImage() nach Sie zeichnen das Bild.
Dann können Sie zeichnen ein anderes Bild auf der Oberseite der ersten und nennen CGBitmapContextCreateImage() erneut, um das zweite Bild. Sie können die alpha mit CGContextSetAlpha(ctx, alphaValue);