0

全てにおいて良い日。

現時点では、NSAttributedStringをサポートするCCLabelTTFサブクラスを実装して、マルチカラーラベルを取得しようとしています。そして、私はCoreTextとCoreGraphicsの知識の欠如によって妨げられています。

いくつかのガイドを読んだ後、NSAttributedStringオブジェクトを使用してテクスチャを作成するためのCCTexture2Dカテゴリを作成しました。

これが私の描画コードです:

data = calloc(POTHigh, POTWide * 2);

colorSpace = CGColorSpaceCreateDeviceGray();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaNone);
CGColorSpaceRelease(colorSpace);

if( ! context ) 
{
    free(data);
    [self release];
    return nil;
}

UIGraphicsPushContext(context);

CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f); 

// draw attributed string to context
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)string);

CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, CGRectMake(0.f, 0.f, dimensions.width, dimensions.height));

CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, 0), path, NULL);

CTFrameDraw(frame, context);

UIGraphicsPopContext();

CFRelease(frame);
CGPathRelease(path);
CFRelease(frameSetter);

そして今、私はいくつかの問題を抱えています:


最初のもの-私のテクスチャは垂直に反転して表示されます。私は、これらの行は

CGContextTranslateCTM(context, 0.0f, POTHigh);
CGContextScaleCTM(context, 1.0f, -1.0f); 

これを防ぐ必要があります。


2つ目は、RGBコンテキストを作成すると、画面に何も表示されないことです。これらの線でRGBコンテキストを作成しようとしました。

colorSpace = CGColorSpaceCreateDeviceRGB();
context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide * 4, colorSpace, kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Big);

グーグルしようとしましたが、私の問題に関連するものは何も見つかりません=(ヘルプ(リンクまたは提案)はありがたいです。

4

3 に答える 3

1

試してみるいくつかのこと:

  • データ割り当てが RGB に対して十分な大きさではありません。試してみてください: data = calloc(POTHigh, POTWide * 4);RGB 色空間の場合。
  • CTFrameDrawGL座標に関連して描画するため、使用する必要はありませんCGContextScaleCTM(context, 1.0f, -1.0f);
    • その行は、UIKit 座標に関連して描画する NSString を使用したため、CCLabelTTF の元の CCTexture2D 作成に入れられましたdrawInRect:
  • 多分他のアルファマスクフラグを試してみてください...? iOSでサポートされているピクセル形式に関する Apple のドキュメントをチェックして、オプションを確認してください。
于 2012-06-07T20:40:49.203 に答える
0

これを使用してカラー テクスチャを取得します。

context = CGBitmapContextCreate(data, POTWide, POTHigh, 8, POTWide, colorSpace, kCGImageAlphaPremultipliedLast);
于 2013-02-03T17:26:54.560 に答える
0

You may want to take a look at ActiveTextView-iOS (https://github.com/storify/ActiveTextView-iOS). It may be of use.

于 2012-06-08T07:26:05.690 に答える