6

ユーザーがペイントしたり、他のビューを追加したりできるビューから画像を取得しようとしています。iPad1&2では、これまでのところすべてが正常に機能しています。しかし、iPad3では犬のように動作します。レイヤーのrenderInContextメソッドを使用しています。

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
    UIGraphicsBeginImageContextWithOptions(self.viewDrawableViewContainer.frame.size, NO, [UIScreen mainScreen].scale);
else
    UIGraphicsBeginImageContext(self.viewDrawableViewContainer.frame.size);
[self.viewDrawableViewContainer.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();   

これはおそらくipad2と同じCPUが原因であることがわかりますが、約1秒かかります。ユーザーがペイントまたは追加するほど、レンダリングに時間がかかります。時には最大5秒で、これは本当に受け入れられません。では、パフォーマンスを向上させるためのオプションはありますか?より小さなレンダリング品質を設定する可能性があります-最高の網膜解像度でのレンダリングは必要ありません...

助けていただければ幸いです!前もって感謝します

4

2 に答える 2

16

また、コンテキストでレンダリングを呼び出す前に、コンテキストで補間品質を変更することにより、レンダリング速度を上げることができます。この変更により、倍率を変更するよりもはるかに高速なスクリーンショットを取得することができました。

もちろん、両方を使用することができ、品質を「なし」に設定する必要はありません。それでも、低は私にとって改善でした。

CGContextSetInterpolationQuality(ctx, kCGInterpolationNone);

また、前の回答で述べた倍率については、新しい倍率が元の倍率の倍数であることを確認してください。つまり、画面の倍率が1.0の場合は、.8ではなく.5のようにする必要があります。.8を使用すると、レンダリングでより多くの情報が計算されるようになり(スケールが均一ではないため)、1.0を使用するよりも遅くなります。

もちろん、これはすべての人にとって良い解決策ではありません。

于 2013-05-09T02:39:36.923 に答える
9

低解像度でレンダリングすることにより、速度を上げることができます。UIGraphicsBeginImageContextWithOptionsスケールファクターを1.0未満、たとえば0.5を使用します。

また、アルファが必要ない場合は、不透明なフラグにYESを渡すことで、速度が少し上がる可能性があります。私は自分で違いの時間を計っていません。

于 2012-08-18T22:58:00.630 に答える