0

CorePlotを使用して円グラフを描画しています。これをPDFに変換して、表示、印刷、および電子メールで送信します。borderLineStyleを追加すると、円グラフの端の周りにもアーティファクトが発生することを除いて、これはすべて正常に機能します。

iPhoneの画面や印刷物では実際には気づきませんが、電子メールで送信して大画面(Acrobat Reader)で表示すると、すぐにわかります。このスクリーンショットは400%にズームされていますが、100%でもはっきりと見えます。円グラフの内側と外側の両方にクリッピングアーティファクトが表示されます。

エッジの周りにアーティファクトがあるCPTPieChart

borderLineStyleを省略した場合、円グラフはきれいできれいです。アーティファクトは、線種が設定されている場合にのみ表示されます。私はこれが好きです:

CPTMutableLineStyle *segmentLineStyle = [CPTMutableLineStyle lineStyle];
segmentLineStyle.lineColor = colour;
segmentLineStyle.lineWidth = size;
_pieChart.borderLineStyle = segmentLineStyle;

私には、それらはクリッピングまたはディザリングのアーティファクトのように見えるので、背景色とグラフの塗りつぶしを白またはクリアに設定してみましたが、これは違いはありません。

CorePlot1.1を使用しています。なぜこれが起こっているのか誰かが何か考えを持っていますか?どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

0

私自身の質問に答えるために。Core Graphics は透明度をサポートしない古い PDF 形式にレンダリングされるという Eric のヒントのおかげで、円グラフのレンダリング方法を変更しようと思いました。

以前は、次のように円グラフを pdf コンテキストに単純にレンダリングしていました。

CGContextRef pdfContext = UIGraphicsGetCurrentContext();
[pieChartView.layer renderInContext:pdfContext];

今、私は最初に円グラフを UIImage にレンダリングし、次にイメージを pdf コンテキストにレンダリングしています。このような:

// Pre-render the pie chart into a temporary UIImage
UIGraphicsBeginImageContextWithOptions (pieChartView.frame.size, YES, 0.0f);
CGContextRef tmpContext = UIGraphicsGetCurrentContext();
[pieChartView.layer renderInContext:tmpContext];
UIImage *pieChartTmpImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

// Draw the pre-rendered pie chart in to the PDF context.
[pieChartTmpImage drawInRect:CGRectMake(0, 0, pieChartTmpImage.size.width, pieChartTmpImage.size.height)];

これにより、円グラフがきれいにレンダリングされるようになりました:)

このコードが実行され、一時的な画像コンテキストがネストされているときに、pdf コンテキストが既に確立されていることを指摘する価値がありますが、それは問題ありません。

于 2013-03-25T21:54:09.617 に答える