首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

bcb 6.0 里怎么通过一批数据来显示图像

2013-04-02 
bcb 6.0 里如何通过一批数据来显示图像我现在从一个模块里采集得到一批数据,数据的大小是256X288个像素,我

bcb 6.0 里如何通过一批数据来显示图像
bcb 6.0 里怎么通过一批数据来显示图像
我现在从一个模块里采集得到一批数据,数据的大小是256X288个像素,我在BCB6.0里想用Image控件来显示这张图片,这要怎么弄。得到的数据是16进制的数据。谢谢各位!
[解决办法]
用tchart画曲线,可以直接从数据库加载数据。
[解决办法]
1、确认图片格式
2、创建对应格式的空文件
3、把数据存到新创建的文件里
4、加载该文件
[解决办法]
加文件头。
借花献佛,下面的是灰度图像,你参考一下吧,建议先搜索一下bmp的文件头看看


unsigned int buffer[sizeof(BITMAPINFOHEADER) + 1024];
    BITMAPINFO* bmi = (BITMAPINFO*)buffer;
    int bmp_w = pImage->m_nWidth;
    int bmp_h = pImage->m_nHeight;

    BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);

    memset( bmih, 0, sizeof(*bmih));
    bmih->biSize   = sizeof(BITMAPINFOHEADER);
    bmih->biWidth  = bmp_w;
    bmih->biHeight = -abs(bmp_h);
    bmih->biPlanes = 1;
    bmih->biCompression = BI_RGB;

    SetStretchBltMode( pDC->GetSafeHdc(), HALFTONE );

    unsigned char* imageData;
    bool deleteImageData;

     imageData = (unsigned char*)pImage->GetDataPtr();
     deleteImageData = false;
//if image is not a true color one, such as grayscale image, we should create a grayscale pallette
     if( pImage->m_nChannels == 1 )
    {
           bmih->biBitCount = 8;
           RGBQUAD* palette = bmi->bmiColors;
           int i;
           for( i = 0; i < 256; i++ )
           {
                palette.rgbBlue = palette.rgbGreen = palette.rgbRed = (BYTE)i;
palette.rgbReserved = 0;
           }
      }
      else
     {
bmih->biBitCount = pImage->m_nChannels * 8;
      }

      int sw = (bmp_w > 0) ? bmp_w : 0;
      int sh = (bmp_h > 0) ? bmp_h : 0;

      int res = StretchDIBits(
              pDC->GetSafeHdc(),//dc
              0,                //x dest
              0,                //y dest


  int(sw),//x dest dims
  int(sh),//y dest dims
              0,                // src x
              0,                // src y
              sw,               // src dims
              sh,               // src dims
              imageData,// array of DIB bits
              (BITMAPINFO*)bmi, // bitmap information
              DIB_RGB_COLORS,// RGB or palette indexes
  SRCCOPY);         // raster operation code

if( deleteImageData )
{
delete imageData;
}

有一部分是我自己改成了
/***获得调色板信息,直接改buffer数据,前40字节为BITMAPINFOHEADER***/
 for( int i = 0; i < 256; i++ )
 {
 buffer[40+4*i] = buffer[41+4*i] = buffer[42+4*i]=i;  //灰度RGB相等
 buffer[43+4*i] = 0;                                  //保留
 }
[解决办法]
unsigned char buffer[sizeof(BITMAPINFOHEADER) + 1024];//bmp信息头+RGB调色板
BITMAPINFO* bmi = (BITMAPINFO*)buffer;//改变数组的格式
int bmp_w ,bmp_h;

/***图像信息***/
bmp_w = Image2->Width;//图像宽度
bmp_h = Image2->Height;//图像高度
BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);//指向BITMAPINFO结构体
memset( bmih, 0, sizeof(*bmih));//赋值0,很多变量的值都为0
bmih->biSize   = sizeof(BITMAPINFOHEADER);//信息头大小
bmih->biWidth  = bmp_w;//图像的宽度
bmih->biHeight = -abs(bmp_h);//图像的高度
bmih->biPlanes = 1;//图片的平面属性,显示器只有一个平面
bmih->biCompression = BI_RGB;//非压缩
bmih->biBitCount = 8;

/***获得调色板信息,直接改buffer数据,前40字节为BITMAPINFOHEADER***/
 for( int i = 0; i < 256; i++ )
 {
 buffer[40+4*i] = buffer[41+4*i] = buffer[42+4*i]=i;  //灰度RGB相等
 buffer[43+4*i] = 0;                                  //保留
 }

热点排行