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

()怎么用CB来做图像处理

2012-02-26 
(求助)如何用CB来做图像处理。由于需要做视频传输,需要增强图像,传输已经做好了,用套接字,传灰度图像,每秒2

(求助)如何用CB来做图像处理。
由于需要做视频传输,需要增强图像,传输已经做好了,用套接字,传灰度图像,每秒25侦。现在不知道如何增强图像。
虽然CANVAS的pixel可以访问每个像素,但是速度太慢,因为灰度图像时512*512,用for循环那得需要512*512次吧?
想用scanline,但是按照help的例子,显示一幅图像的时候只能显示一半。谁有好的思路望赐教。

为什么CB的资料这么少啊,虽然软件不错可是比起VC的资料来太少了,我是个初学者。

[解决办法]
CB自带的例子是如果把pBitmap显示出来,和把像素放到ptr里;

C/C++ code
//注释掉那部分就不会有问题了void __fastcall TForm1::Button1Click(TObject *Sender){  Graphics::TBitmap *pBitmap = new Graphics::TBitmap();  //This example shows drawing directly to the Bitmap  Byte *ptr;  try  {    pBitmap->LoadFromFile("C:\\bb.bmp");    /*    for (int y = 0; y < pBitmap->Height; y++)    {      ptr = (Byte *)pBitmap->ScanLine[y];      for (int x = 0; x < pBitmap->Width; x++)        ptr[x] = (Byte)y;    }    */    Canvas->Draw(10,10,pBitmap);  }  catch (...)  {    ShowMessage("Could not load or alter bitmap");  }  delete pBitmap;}
[解决办法]
无需多说,上代码解决问题.
C/C++ code
// 位图图像转灰度void __fastcall CrnBitmap2GrayScale(Graphics::TBitmap *bmp){    BYTE btGray;    bmp->PixelFormat = pf24bit;    for(int y=0; y<bmp->Height; y++)    {        BYTE *pLine = (BYTE *)bmp->ScanLine[y];        for(int x=0; x<bmp->Width; x++)        {            // 平均值灰度            // btGray = (pLine[0] + pLine[1] + pLine[2]) / 3;            // 最大值            // btGray = Max(pLine[2], Max(pLine[0], pLine[1]));            // YUV值            btGray = 0.30 * pLine[0] + 0.59 * pLine[1] + 0.11 * pLine[2];            // 63 63 72 75 6E 2E 63 6F 6D            pLine[0] = btGray;            pLine[1] = btGray;            pLine[2] = btGray;            pLine += 3;        }    }}
[解决办法]
探讨
无需多说,上代码解决问题.

C/C++ code
// 位图图像转灰度
void __fastcall CrnBitmap2GrayScale(Graphics::TBitmap *bmp)
{
BYTE btGray;
bmp->PixelFormat = pf24bit;
for(int y=0; y<bmp->Height; y++)
{
BYTE *pLine = (BYTE *)bmp->ScanLine[y];
for(int x=0; x<bmp->Width; x++)
{
// 平均值灰度
// btGray = (pLine[0] + pLine[1] + pLine[2]) / 3;
// 最大值
// btGray = Max(pLine[2], Max(pLine[0], pLine[1]));
// YUV值
btGray = 0.30 * pLine[0] + 0.59 * pLine[1] + 0.11 * pLine[2];

// 63 63 72 75 6E 2E 63 6F 6D
pLine[0] = btGray;
pLine[1] = btGray;
pLine[2] = btGray;
pLine += 3;
}
}
}

热点排行