2010-11-19 2 views
12

CorePlot을 사용하여 응용 프로그램에 다른 그래프를 그려야합니다. 그런 다음이 그래프를 jpg 파일에 저장하고 일부 소셜 네트워킹 사이트 (예 : Twitter)에 게시하고 싶습니다. CorePlot에서 만든 그래픽을 jpg 파일에 저장하는 방법

좀 문서 읽기를하고 다음 방법 나를 위해 유용 할 수 있음을 이해 :

이 가 가 CGBitmapContextCreateImage이

    • : 비트 맵 그래픽 컨텍스트에서 복사본으로의 CGImage를 만들어 (즉, 뷰 내 그래프이다 하게 위치 또는 전체 화면 - 나는 잘 이해가)

    • CGImageCreateWithImageInRect을 : 필요한 경우 나 이미지의 일부를 클립 수

    • [있는 UIImage imageWithCGImage? ] :있는 UIImage 객체의 CGImage 변환은

    • UIImageJPEGRepresentation : jpg이있는 NSData 객체에 내있는 UIImage 객체를 변환 한 후 내 소셜 네트워크에 공유 할 수 있습니다

      1. 첫 번째 질문은 : 나는 오른쪽을 이해 작업을 수행하기 위해 수행해야하는 작업 순서? 나는 그것을 밖으로 나 자신을 시도했을 것이다, 그러나 나는 두 번째 질문에 이르게 문제가있어 : 내가 CorePlot을 사용하고있는 경우 그래픽 컨텍스트 정보가 CGBitmapContextCreateImage로 전달받을 수 있나요 어디서

      2. 를? 그것이 멍청한 질문이라면 미안하지만 그래픽 콘텍스트가있는 것은 아닙니다.

    감사합니다 사전에 어떤 도움을 많이! 이 모든 것을 어딘가에 가져 오면 내 코드 샘플을 여기에 게시하겠다고 약속합니다.

    음, 브래드 덕분에, 정말 쉬웠다, 그러나 나는 promissed, 나는이 선을 게시 할 수 있습니다

    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"); 
    
  • +1

    사이드 노트로 jpg 대신 png를 고려 했습니까? 차트와 같은 컴퓨터 생성 그래픽의 경우 더 좋을 수 있습니다. – ustun

    답변

    20

    사실, 핵심 플롯의 모든 그리기 요소에 사용되는 CPLayer의 기본 클래스의있는 UIImage의 인스턴스를 반환 -imageOfLayer라는 카테고리 방법이있다 당신이 그것을 부르는 층이 무엇이든간에. 이 작업이 어떻게 수행되는지 보려면 프레임 워크의 CPPlatformSpecificCategories.hCPPlatformSpecificCategories.m 파일을 참조하십시오.

    CPGraph 인스턴스에서 -imageOfLayer을 사용하고 UIImageJPEGRepresentation()을 사용하여 해당 이미지의 JPEG 버전을 만드십시오. 그런 다음 정상적인 방법으로 이미지를 업로드 할 수 있습니다.

    마찬가지로 레이어 및 하위 레이어의 PDF 표현을 포함하는 NSData 인스턴스를 반환하는 -dataForPDFRepresentationOfLayer 메서드가 있습니다.

    +0

    예! 너무 쉬웠다. 고마워! – Arts

    +0

    안녕하세요 ..이 가능한 전체 그래프 이미지입니다 .. 난 단지 320 엑스 460.Visiable 그래프 이미지 .. 내가 전체 그래프 이미지 .. 원하는거야? 내가 어떻게 얻을 수 있니? –

    2

    내가 CorePlot에 대해 잘 몰라요. 하지만 CorePlot이 그래프를 자체적으로 렌더링하는 뷰를 제공한다고 가정합니다. CorePlot이 그래프의 UIImage을 가져 오는 메커니즘을 제공하지 않으면 CorePlot을 자신의 Bitmap Graphics Context로 그리기 위해 속일 수 있습니다. 여기에서 저장할 이미지 객체를 만들 수 있습니다.

    1) UIGraphicsBeginImageContext()을 이용한 비트 맵 그래픽 콘텍스트를 생성 :

    여기 기본적인 접근 방법. 또한 컨텍스트를 "현재"컨텍스트로 만듭니다. 당신은 또한 CGBitmapContextCreate()을 사용할 수 있습니다.하지만 UIGraphicsPushContext()을 최신으로 사용해야합니다.

    2) CorePlot보기의 drawRect: 메소드를 호출하십시오.

    3)를 사용하여 UIImageJPEGRepresentation()NSData 목적으로 이펙 비트를 얻기) UIGraphicsEndImageContext()

    5 정리) UIGraphicsGetImageFromCurrentImageContext()

    4를 사용하여 그래픽 환경에서 이미지를 얻는다.

    6) NSData 방법을 사용하여 JPEG를 업로드 (또는 저장/기타 ..)

    관련 문제