Frage

I CorePlot bin mit verschiedenen Graphen in meiner Anwendung zu ziehen. Dann möchte ich diese Grafik auf eine jpg-Datei zu speichern und veröffentlichen, um einig Social-Networking-Website (zum Beispiel Twitter).

Ich habe einige Unterlagen lesen und zu verstehen, dass die folgenden Methoden für mich nützlich sein könnten:

  • CGBitmapContextCreateImage: eine CGImage als Kopie von einem Bitmap-Grafikkontext zu schaffen (das heißt die Ansicht, wo mein Diagramm liegt, oder der ganze Bildschirm - hat ich verstanden, nicht wahr?)

  • CGImageCreateWithImageInRect: Ich kann einen Teil des Bildes stutzt, wenn nötig

  • [UIImage imageWithCGImage]: CGImage auf ein UIImage-Objekt konvertieren

  • UIImageJPEGRepresentation: mein UIImage-Objekt zu einem jpg NSData Objekt umzuwandeln, die dann kann ich zu meinem sozialen Netzwerk teilen

    1. Die erste Frage ist: habe ich verstanden, rechts die Folge von Operationen muss ich durchführen meine Aufgabe zu erfüllen? Ich würde es aus selbst habe versucht, aber ich habe ein Problem, das führt zur zweiten Frage stand:

    2. Von wo bekomme ich die Info-Grafikkontext in weitergeben CGBitmapContextCreateImage , wenn ich bin mit CorePlot? Sorry, wenn es eine dumme Frage, aber ich bin nicht wirklich zu Hause mit Graphikkontexten.

Vielen Dank für jede Hilfe im Voraus! Und wenn ich mit allen diesen irgendwo bekomme ich verspreche hier meinen Code Probe zu stellen.

Nun, dank Brad, es war wirklich einfach, aber wie ich versprochen, ich habe die Zeilen schreiben:

CPXYGraph *graph=[[CPXYGraph alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

// setting up the graph
// ...

UIImage *newImage=[graph imageOfLayer];
NSData *newPNG=UIImagePNGRepresentation(newImage); // or you can use JPG or PDF

// For test purposes I write the file to the Documents directory, but you can do whatever you want with your new .png file
NSString *filePath=[NSString stringWithFormat:@"%@/graph.png", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];

if([newPNG writeToFile:filePath atomically:YES]) 
    NSLog(@"Created new file successfully");
War es hilfreich?

Lösung

die CPlayer Basisklasse für alle Zeichenelemente in Core-Plot verwendet Eigentlich hat eine Kategorie Methode namens -imageOfLayer, dass die Renditen eine UIImage-Instanz, was auch immer Sie es nennen Schicht auf. Siehe die CPPlatformSpecificCategories.h und CPPlatformSpecificCategories.m Dateien im Rahmen, wenn Sie sehen wollen, wie dies erreicht wird.

Einfach -imageOfLayer auf CPGraph Instanz verwenden und dann UIImageJPEGRepresentation() verwenden, um die JPEG-Version dieses Bildes zu erstellen. Anschließend können Sie das Bild laden die normalen Mittel verwenden.

Ebenso gibt es ein Verfahren, dass -dataForPDFRepresentationOfLayer kehrt ein NSData Beispiel eine PDF-Darstellung der Schicht und deren Subschichten enthält.

Andere Tipps

Ich weiß nicht viel über CorePlot. Aber ich nehme CorePlot eine Ansicht bietet, die ein Diagramm, um sich selbst macht. Wenn CorePlot keinen Mechanismus bietet eine UIImage des Graphen zu bekommen, dann können Sie wahrscheinlich CorePlot in Zeichnung in Ihre eigene Bitmap-Grafiken Context Trick, von dem Sie ein Bild-Objekt erstellen können speichern.

Hier ist der grundlegende Ansatz:

1) erstellen Kontext eines Bitmap-Grafiken mit UIGraphicsBeginImageContext(). Dies wird auch den Zusammenhang, macht den „aktuelle“ Kontext. Sie könnten auch CGBitmapContextCreate() verwenden, aber dann würden Sie auch Gebrauch UIGraphicsPushContext() müssen sie Strom zu machen.

2) rufen Sie die drawRect: Methode des CorePlot Ansicht.

3) erhält das Bild von dem Grafikkontext mit UIGraphicsGetImageFromCurrentImageContext()

4) Sanierung mit UIGraphicsEndImageContext()

5) erhalten Sie Ihre JPEG-Bits in eine NSData Objekt mit UIImageJPEGRepresentation().

6) speichern / laden Sie Ihre jpeg mit NSData Methoden (oder andere ..)

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