Библиотека Coreplot - Извлечение всего графического изображения - PullRequest
3 голосов
/ 22 февраля 2012

Я создаю изображение для графика, используя этот код

UIImage *newImage=[graph imageOfLayer]
NSData *newPNG= UIImageJPEGRepresentation(newImage, 1.0); 
NSString *filePath=[NSString stringWithFormat:@"%@/graph.jpg",     [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];           
if([newPNG writeToFile:filePath atomically:YES])
NSLog(@"Created new file successfully");

Но я получаю только видимую область (320 * 460) на изображении. Как получить изображение целого графика с осью. Пожалуйста, предоставьте фрагмент кода, как я могу сделать это с coreplot.

Заранее спасибо ...

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

Создайте новый график размером желаемого выходного изображения.Его не нужно добавлять к представлению хостинга - это необходимо только для отображения на экране.

CPTXYGraph *graph = [(CPTXYGraph *)[CPTXYGraph alloc] initWithFrame:desiredFrame];
// set up the graph as usual
UIImage *newImage=[graph imageOfLayer];
// process output image
0 голосов
/ 29 марта 2013

Мой подход к этой проблеме заключался в создании метода для извлечения изображения.

В этом методе я на мгновение увеличиваю вид хостинга, вид с прокруткой, границы графика и границы области графика. Затем я конвертирую график в изображение.

Затем я удаляю вид хостинга из его контейнера, чтобы удалить его с экрана. Затем я вызываю метод doPlot для повторной инициализации графика и его данных с помощью метода DoPlot. Мой код ниже.

При выполнении этого может возникнуть визуальный джиттер. Тем не менее, вы всегда можете замаскировать это, используя предупреждение либо для ввода электронного письма для экспорта, либо просто с помощью простого предупреждения о том, что изображение экспортировано.

//=============================================================================
/**
 Gets the image of the chart to export via email.
 */
//=============================================================================
-(UIImage *) getImage
{

    //Temprorarilty make plot bigger.
    // CGRect rect =  self.hostingView.bounds;
    CGRect rect =  self.scroller.bounds;
    rect.size.height = rect.size.height -100;

    rect.origin.x = 0;
    rect.size.width = rect.size.width + [fields count] * 100.0;
    [self.hostingView setBounds:rect];
    [scroller setContentSize:  hostingView.frame.size];
    graph.plotAreaFrame.bounds = rect;
    graph.bounds = rect;


    UIImage * image =[graph imageOfLayer];//get image of plot.


    //Redraw the plot back at its normal size;
    [self.hostingView removeFromSuperview];
    self.hostingView = nil;
    [self doPlot];

     return image;
}//============================================================================
...