Wie erstelle ich ein neues Bild von oben auf eine bereits existierende Quarz mit Zeichen?
-
08-07-2019 - |
Frage
Ich habe eine Ansicht mit UIImageView ich dieses UIImageView Bild zuordnen, indem camera..now i einige Zeichnung auf Bild machen wollen .... mit coregraphics.i so etwas wie dies tun wollen ... einen Bereich auswählen, indem Sie berühren und Zeichnungslinie, wenn Linie wollen so etwas wie Kreis oder irgendwelche shape..i schließt sich in etwas anderes zum Beispiel die Farbe wechseln bin in der Lage i .. bis jetzt there.turn dass in Graustufen diesem speziellen Bereich ändern Linie zu zeichnen ... hier ist ein Bild der Linie eine UIImage Ansicht gezeichnet über ...
, aber ich bin nicht in der Lage, es herauszufinden, wie kann ich bei der Imageview image..mean ziehen, wie Imageview Bild ändern ???
Auch ich will Image wiederhergestellt werden, wenn sie auf Löschtaste oder so etwas wie undo..does klicken jemand weiß, wie dies zu erreichen?
und
Wie erstelle ich ein Rechteck, wenn Klick auf die Ernte Taste, um das Rechteck zu bewegen, wo jeder auf dem Bildschirm ... und dann den Knopf drücken um das Bild zu zuzuschneiden ... und dann zugeschnittene Bild speichern ..
Lösung
Dies sind die Schritte:
- Erstellen Sie eine CGBitmapContext das Bild der Farbraum und Abmessungen entsprechen.
- Zeichnen Sie das Bild in diesem Zusammenhang.
- Zeichnen Sie, was Sie auf dem Bild wollen.
- Erstellen Sie ein neues Bild aus dem Kontext.
- den Kontext entsorgen.
Hier ist ein Verfahren, das ein Bild nimmt, zieht etwas oben drauf und gibt einen neuen UIImage mit modifizierten Inhalt:
- (UIImage*)modifiedImageWithImage:(UIImage*)uiImage
{
// build context to draw in
CGImageRef image = uiImage.CGImage;
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(NULL,
CGImageGetWidth(image), CGImageGetHeight(image),
8, CGImageGetWidth(image) * 4,
colorspace, kCGImageAlphaPremultipliedLast);
CGColorSpaceRelease(colorspace);
// draw original image
CGRect r = CGRectMake(0, 0, CGImageGetWidth(image), CGImageGetHeight(image));
CGContextSetBlendMode(ctx, kCGBlendModeCopy);
CGContextDrawImage(ctx, r, image);
CGContextSetBlendMode(ctx, kCGBlendModeNormal);
// draw something
CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
CGContextSetRGBStrokeColor(ctx, 1.0f, 1.0f, 1.0f, 0.5f);
CGContextSetLineWidth(ctx, 16.0f);
CGContextDrawPath(ctx, kCGPathStroke);
CGContextAddEllipseInRect(ctx, CGRectInset(r, 10, 10));
CGContextSetRGBStrokeColor(ctx, 0.7f, 0.0f, 0.0f, 1.0f);
CGContextSetLineWidth(ctx, 4.0f);
CGContextDrawPath(ctx, kCGPathStroke);
// create resulting image
image = CGBitmapContextCreateImage(ctx);
UIImage* newImage = [[[UIImage alloc] initWithCGImage:image] autorelease];
CGImageRelease(image);
CGContextRelease(ctx);
return newImage;
}
Um altes Bild wieder herzustellen, hält nur einen Verweis darauf.
Das Zuschneiden Sache ist nicht auf die oben und Sie sollten eine neue Frage für das erstellen.
Andere Tipps
Viele einfachere Lösung wäre
(UIImage *) modifyImage:(UIImage *)inputImage
{
UIGraphicsBeginImageContext(inputImage.size);
[inputImage drawInRect:CGRectMake(0, 0, inputImage.size.width, inputImage.size.height);
CGContextRef ctx = UIGraphicsGetCurrentContext();
//Drawing code using above context goes here
/*
*
*/
UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return outputImage;
}
Werfen Sie einen Blick auf Überblick über Quartz 2D Informationen zur Verwendung von Quartz 2D auf dem iPhone.