3

そのため、私はCGBitmapContextを使用してソフトウェアブリッターをiOSに適合させています。データをビットマップに書き込んでから、CoreGraphics関数を使用してCGBitmapContextにテキストを書き込みます。ソフトウェアブリッターは左上の原点を使用し、CoreGraphics関数は左下の原点を使用します。そのため、(0、0)のブリッターを使用して画像を描画すると、左上隅に表示されます。(0、0)でCGを使用してテキストを描画すると、左下隅に表示され、反転されません。はい、座標の反転に関する他のすべての質問を読みました。結果のCG画像に対してそれを実行して、ビューに正しく表示します。おそらくコード例が役立つでしょう...

    // This image is at the top left corner using the custom blitter.
screen->write(image, ark::Point(0, 0));
// This text is at the bottom left corner RIGHT SIDE UP
// cg context is a CGBitmapContext
CGContextShowTextAtPoint(
    cgcontext, 
    0, 0, 
    str.c_str(), 
    str.length());

// Send final image to video output.
CGImageRef screenImage = CGBitmapContextCreateImage(cgcontext);

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0, 480);
// Here I flip the whole image, so if I flip the text above, then
// it ends up upside down.
CGContextScaleCTM(context, 1, -1); 
CGContextDrawImage(context, 
    CGRectMake(0, 0, 320, 480), screenImage);
CGContextRestoreGState(context);

CGImageRelease(screenImage);

座標系を組み合わせるにはどうすればよいですか?ULCオリジンを使用してテキストを右側を上にして描画するにはどうすればよいですか?

4

1 に答える 1

1

座標系を反転すると、上下逆さまに描画されます。その結果がなければ、その変換を行うことはできません。(これを行う理由は、結果を裏返しにする何かに結果を渡そうとしている場合であり、その結果、逆さまが再び正しい向きになります。)

すべてのものは、常に正の y が上向き、負の y が下向きに描画されます。テキストは正の y に向かって上昇し、負の y に向かってベースラインより下に下降します。連続する線のベースラインは、y の位置が低くなります。同じことがイメージと (非テキスト) パスにも当てはまります。すべてがこのように描画されます。

座標系を変換することによって行うことは、物の描画方法を変更することではありません。彼らは常に正のyが上がるように描きます。座標系を変換することは、上下を再定義することです。正の y を負の y に、またはその逆にします。0, 0 の場所も変更します。

したがって、座標系を反転するのではなく、(のみ) 変換する必要があります。コンテキスト全体の高さからテキスト行の高さを差し引いた分だけ上に移動する必要があります。次に、その位置として 0,0 を定義して、テキストを 0,0 に表示すると、その位置から右方向 (および下方向) に描画されます。

または、翻訳せずに、その時点からのテキストを表示します。どちらの方法でも機能します。

変換先のコンテキストでの変換は必要なく、望んでいないと確信しています。変換 (変換する場合) は、ビットマップ コンテキストで行われる必要があります。

于 2011-02-20T05:16:27.513 に答える