掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字をCanvasに高速に描画するには? (ID:31993)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
コンソールから文字を読み込み、Canvasに書こうとしていますが、 どうにも遅いというか、CPUを消費するので困っています。 どこか、悪い部分があるのでしょうか? 下が、現在のプログラムの描画部分です。 for (int r=0;r<Rows;++r) { int slen = 0; WORD a0 = ConsChars[r*Cols].Attributes; int prevFg = FgColorTable[a0&0xF]; int prevBg = BgColorTable[(a0>>4)&0xF]; int x = 0; int y = r*FontHeight; for (int c=0;c<Cols;++c) { //表示されている画面でのインデックスー>バッファ全体のインデックス int i = c + r*Cols; WORD a = ConsChars[i].Attributes; int fg = FgColorTable[a&0xF]; int bg = BgColorTable[(a>>4)&0xF]; if(fg != prevFg || bg!=prevBg){ SetTextColor(hDC, prevFg); SetBkColor(hDC, prevBg); TextOutA(hDC, x, y, ss, slen); prevFg = fg; prevBg = bg; slen = 0; x = c*FontWidth; } if (a&COMMON_LVB_TRAILING_BYTE) { //not draw text } else if ( (a & COMMON_LVB_LEADING_BYTE) && (i+1 < ConsCharsSize) ) { ss[slen++] = ConsChars[i].Char.AsciiChar; ss[slen++] = ConsChars[i+1].Char.AsciiChar; } else { ss[slen++] = ConsChars[i].Char.AsciiChar; } } SetTextColor(hDC, prevFg); SetBkColor(hDC, prevBg); TextOutA(hDC, x, y, ss, slen); } ConsCharsはCHAR_INFO型の配列で、文字と色の情報を格納しています。 ConsCharsのサイズがConsCharsSizeで、ConsCharSize==Rows*Colsです。 2バイト文字の1文字目の時、a & COMMON_LVB_LEADING_BYTEは真になります。 同色の文字の集まりを一度に描画することで、効率よく書こうとしています。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.