读书人

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

发布时间: 2012-02-26 20:19:45 作者: rapoo

(求助)如何用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;
}
}
}

读书人网 >C++ Builder

热点推荐