2016-07-10 10 views
0

iOSのテキストをテクスチャにレンダリングしたいので、OpenGLを使って描画することができます。私はこのコードを使用しています:iOSでフォントをシンプルな一行でレンダリングする方法は?

CGSize textSize = [m_string sizeWithAttributes: m_attribs]; 
CGSize frameSize = CGSizeMake(NextPowerOf2((NSInteger)(MAX(textSize.width, textSize.height))), NextPowerOf2((NSInteger)textSize.height)); 

UIGraphicsBeginImageContextWithOptions(frameSize, NO /*opaque*/ , 1.0 /*scale*/); 

CGContextRef currentContext = UIGraphicsGetCurrentContext(); 
CGContextSetTextDrawingMode(currentContext, kCGTextFillStroke); 

CGContextSetLineWidth(currentContext, 1); 
[m_string drawAtPoint:CGPointMake (0, 0) withAttributes:m_attribs]; 

私はkCGTextFillStrokeまたはkCGTextStrokeを使用しようとすると、私はこれを取得:
enter image description here

私はkCGTextFillを使用しようとすると、私はこの取得:
enter image description here

シンプルな1行のクリーンなテキストを取得する方法はありますか? (OS X上でレンダリングから撮影)
enter image description here

答えて

1

これは解像度の問題がありますが、私はあなたがインスタンスのUIコンポーネントUILabelを使用することをお勧めのiOSを使用している

サイン...ということに関係なく、のように見えます。次に、改行モード、行数、属性付きテキスト、フォントを含む任意のパラメータを任意のラベルに設定します。sizeToFitに電話して、ラベルの最小サイズを取得できます。あなたは他のビューにラベルを追加するのではなく、ビューからUIImageを作成します(SOのそれについてはかなりの回答があります)。画像を取得したら、元のRGBAデータをテクスチャにコピーすることができます(UIImageからRGBAデータを取得する方法についての回答が再度ロードされます)。そしてそれはそれです。レターナx2とx3デバイスのコンテンツの規模をチェックしたり、対応する要素でフォントサイズを増やしたりすることで手動で行うことができます。

この手順は、回避策のように見えるかもしれませんし、コアグラフィックスを使用して、その後ずっと遅いかもしれないが、真実は、それとはかなり遠いです:サイズおよびオプションを使用してコンテキストを作成

  • はと同じRGBAバッファを作成しますCGImageUIImageのみがラップされます)
  • コアグラフィックスを使用してビューをUIImageに描画するので、手順は本質的にボンネットの下で同じです。
  • テクスチャにデータをコピーする必要がありますが、どちらの場合もそうです。ここで少し欠点は、画像からRGBA生データにアクセスするには、生データをそのラインのどこかにコピー(複製)する必要がありますが、それは比較的迅速な操作であり、おそらく同じ手順で発生する可能性があります。

したがって、この手順ではリソースが少ししか消費されない可能性がありますが、実際にはそれほど多くのリソースを消費することはありませんが、テキストの描画には無制限のパワーを得ることができます。

+0

UILabelとほぼ同じ結果が得られました。 CATextLayerも試しました - それでも同じです。私は、iOSがもっと大きな解像度を要求すると思う。それでも、UILabelはより良い洞穴に見えるので、私はそれに固執します、ありがとう! –

+0

とにかくどの解像度ですか?ラベルのサイズと出力テクスチャは何ですか? –

+0

約50x20ピクセルです。 –

0

まあ、結局、倍の大きさのテクスチャにレンダリングし、スケール= 2でUIImageに変換しました。網膜ディスプレイを利用することでそれが実現しました。

UIImage* pTheImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIImage* pScaledImage = [UIImage imageWithCGImage:pTheImage.CGImage scale:2 orientation:pTheImage.imageOrientation]; 

私はOpenGL描画用のテクスチャとして使用しています。

関連する問題