C++ Builder > TCanvas > 범례 그리기
12564 단어 TCanvascppBuilder#migrated
C++ Builder XE4
TCanvas에서 범례를 그려 보았다.
참고 h tp // w w. 네. jp / 아사히 / 아 / ch1394 / lp / 0300/03. htm
오류 처리는 깔끔하지 않습니다.
Unit1.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
static const int kNumColor = 4;
// Microsoft color
// @ http://colorhunt.co/blog/google-microsoft-brand-colors/
static const int baseColors[][3] = {
{ 0x00, 0xA1, 0xF1 }, // R, G, B
{ 0x7C, 0xBB, 0x00 }, // R, G, B
{ 0xFF, 0xBB, 0x00 }, // R, G, B
{ 0xF6, 0x53, 0x14 }, // R, G, B
};
TColor __fastcall TForm1::getTColor(int index)
{
if (index < 0 || index >= kNumColor) {
return RGB(0, 0, 0);
}
int R = baseColors[index][0];
int G = baseColors[index][1];
int B = baseColors[index][2];
return RGB(R, G, B);
}
void __fastcall TForm1::clearTImage(TImage *imgPtr)
{
imgPtr->Canvas->Brush->Color = clWhite;
imgPtr->Canvas->FillRect(Rect(0, 0, imgPtr->Width, imgPtr->Height));
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
drawLegends();
}
void __fastcall TForm1::drawLegends(void)
{
// 1. 消去
clearTImage(Image1);
// 2. 凡例の描画
int step_y = 20; // 結果を見ながら調整した
for(int idx=0; idx < kNumColor; idx++) {
char code = 'A' + idx;
writeTextOnTImage(Image1, /*x=*/30, /*y=*/10 + step_y * idx, String(code)); // 位置30は任意
drawLegentColor(Image1, /*x=*/14, /*y=*/14 + step_y * idx, getTColor(/*index=*/idx)); // 位置14は任意
}
}
void __fastcall TForm1::writeTextOnTImage(TImage *imgPtr, int x, int y, String text)
{
imgPtr->Canvas->Font->Color = clBlack;
imgPtr->Canvas->Brush->Color = clWhite; // これがないとdrawLegendColor()の後に文字に背景色が付く
imgPtr->Canvas->Font->Size = 10; // サイズ10は任意
imgPtr->Canvas->TextOutW(x, y, text.c_str());
}
void __fastcall TForm1::drawLegentColor(TImage *imgPtr, int x, int y, TColor acolor)
{
imgPtr->Canvas->Brush->Color = acolor;
imgPtr->Canvas->FillRect(Rect(x, y, x+10, y+10)); // サイズ10は任意
}
//---------------------------------------------------------------------------
이런 느낌으로 사용한다.
Reference
이 문제에 관하여(C++ Builder > TCanvas > 범례 그리기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/7of9/items/58b20cdd1e285d3cd9fb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)