读书人

TChart绘制直方图有关问题

发布时间: 2012-04-16 16:20:04 作者: rapoo

TChart绘制直方图问题
我申请了GrayClass[][]二维数组,第一维用于标记Gray, red, green, blue通道,第二维标记每个灰度级,范围为0~255。我想绘制直方图,用TChart组件,但是执行后只是在每个series上画了几条竖线而已,是代码问题还是设置问题?请各位大侠帮我看看。谢谢了。
下面是我的代码:

C/C++ code
for(n = 0; n < 256; n++){GrayClass[0][n] = 0; // grayGrayClass[1][n] = 0; // redGrayClass[2][n] = 0; // greenGrayClass[3][n] = 0; // blue}for(j = 0; j < bmp1 -> Height; j++) // j表示垂直方向ptr = (TRGBTriple *)bmp1 -> ScanLine[j];for(i = 0; i < bmp1 -> Width; i++) // i表示水平方向{//计算每个像素点灰度值Gray = Ceil(ptr[i].rgbtRed * 0.299 + ptr[i].rgbtGreen * 0.587 + ptr[i].rgbtBlue * 0.114);Red = ptr[i].rgbtRed;Green = ptr[i].rgbtGreen;Blue = ptr[i].rgbtBlue;for(n = 0; n < 256; n++) // n表示灰度级if(Gray == n){GrayClass[0][n] = GrayClass[0][n] + 1; //统计灰色在每个灰度级上像素点的数目}if(Red == n){GrayClass[1][n] = GrayClass[1][n] + 1; //统计红色在每个灰度级上像素点的数目}if(Green == n){GrayClass[2][n] = GrayClass[2][n] + 1; //统计绿色在每个灰度级上像素点数目}if(Blue == n){GrayClass[3][n] = GrayClass[3][n] + 1; //统计蓝色在每个灰度级上像素点数目}}for(n = 0; n < 256; n++){Series1 -> AddXY(n, GrayClass[0][n], n, clBlack);Series2 -> AddXY(n, GrayClass[1][n], n, clRed);Series3 -> AddXY(n, GrayClass[2][n], n, clGreen);Series4 -> AddXY(n, GrayClass[3][n], n, clBlue);}


[解决办法]
series设置的问题,
直方图(Histogram)又称柱状图是吗?

你series要设置成为Bar类型的,不要设置为line类型的
[解决办法]
C/C++ code
void __fastcall TForm1::Button18Click ( TObject *Sender ){    srand ( time ( NULL ) );    int p;    for ( int i = 0; i < 10; i++ )    {        p = random ( 10 ) + 1;        Series14->AddBar ( p, "", clTeeColor );    }}
[解决办法]
series设置成为Bar类型,然后你试一下,就会有结果

[解决办法]
C/C++ code
void __fastcall TForm1::Button18Click ( TObject *Sender ){    TColor MyColor[10] = {clAqua, clBlack, clBlue, clCream, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray};    srand ( time ( NULL ) );    int p;    for ( int i = 0; i < 10; i++ )    {        p = random ( 10 ) + 1;        Series14->AddBar ( p, "", MyColor[i] );    }} 

读书人网 >C++ Builder

热点推荐