3

最初に透明なビットマップに文字列を描画し、次に A を宛先キャンバスに描画する必要があります。ただし、特定のケースでは、文字の周りに黒い枠が表示されます。

Bitmap* tempImg = new Bitmap(1000, 1000, PixelFormat32bppARGB);
Graphics tempGr(tempImg);
tempGr.Clear(Color(0, 255,255,255));
Gdiplus::SolidBrush* brush = new SolidBrush(Color(255, 255, 0, 0 ));
Gdiplus::FontFamily  fontFamily(L"Times New Roman");
Gdiplus::Font*  font = new Gdiplus::Font(&fontFamily, 19, FontStyleRegular, UnitPixel);
RectF rec(400, 400, 1000, 10000);
tempGr.DrawString(
    L"Merry Chrismas", 
    -1,
    font,
    rec,
    NULL,
    brush
    );

Graphics desGr(hdc);
desGr.Clear(Color::Gray);
desGr.DrawImage(tempImg , 0,0, 1000, 1000);

desGr の文字描画には、一部のフォントサイズ用のブラック ボードがあります。

この問題を回避するにはどうすればよいですか? どうもありがとう!

4

2 に答える 2

2

ここでの問題は、テキストを透明な背景に描画していることだと思います。

tempGr.Clear への呼び出しの後にこの行を追加してみてください...

tempGr.TextRenderingHint = TextRenderingHint.AntiAlias;

ps - 申し訳ありませんが、C++ の正確な構文はわかりません ;)

于 2009-11-11T15:37:25.727 に答える
1

XNAでこの問題を解決しました:

背景を前景色と同じ色にクリアします。唯一の違いは、背景は Alpha=0 で、前景は Alpha >> 0 であることです。

黒い境界線は、さまざまな色の背景と前景を混ぜ合わせたものです。現象を十分に理解するために、背景を対照的な色にクリアしてみてください。

于 2013-05-10T06:58:28.757 に答える