VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 803|回复: 3

imageXpress类似的功能,把一幅RGB图片分离成R和G和B三色的三张图片另存至指定路径,如何做

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-31 11:40:01 | 显示全部楼层 |阅读模式
imageXpress类似的功能,把一幅RGB图片分离成R和G和B三色的三张图片另存至指定路径,如何做?imageXpress.dll只支持VB/Deliph?有无类似组件?要求速度快。
回复

使用道具 举报

0

主题

16

帖子

16.00

积分

新手上路

Rank: 1

积分
16.00
发表于 2020-3-14 16:15:01 | 显示全部楼层
用scanline扫描然后,弄到3个tbitmap里面去不就行了,速度不错的
这个dll没用过
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-3-18 03:45:01 | 显示全部楼层
Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
// This example shows drawing directly to the Bitmap
  Byte *ptr;
  try
  {
    pBitmap->LoadFromFile("d:\\temp.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(0,0,pBitmap);
  }
  catch (...)
  {
    ShowMessage("Could not load or alter bitmap");
  }
  delete pBitmap;



这是帮助里的例子,我考下了,运行,提示“Gdi.dll”出错,是否还要加载啥文件?另外,读出的分离象素如何再组成一个Bmp文件?感谢“安吉尔”!
回复

使用道具 举报

0

主题

13

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-6-14 00:00:01 | 显示全部楼层
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Graphics::TBitmap *bmpR=new Graphics::TBitmap;
    Graphics::TBitmap *bmpG=new Graphics::TBitmap;
    Graphics::TBitmap *bmpB=new Graphics::TBitmap;
    bmpR->LoadFromFile("C:\\test.bmp");
    bmpR->PixelFormat=pf24bit;    //设置成24位色(改起来方便,呵呵)
    bmpG->Assign(bmpR);           //和bmpR一样
    bmpB->Assign(bmpR);

    Byte *ptrR,*ptrG,*ptrB;
    for (int y = 0; y < bmpR->Height; y++)
    {
      ptrR = (Byte *)bmpR->ScanLine[y];   //每行的像素颜色序列
      ptrG = (Byte *)bmpG->ScanLine[y];
      ptrB = (Byte *)bmpB->ScanLine[y];
      for (int x = 0; x < bmpR->Width; x++) //对于24Bit图片每个像素点占三位
      {
        ptrB[x*3+1] = 0; //去除绿色分量
        ptrB[x*3+2] = 0; //去除红色分量,剩下蓝色的

        ptrG[x*3] = 0;   //去除蓝色和红色分量,留下绿色的
        ptrG[x*3+2] = 0;

        ptrR[x*3] = 0;   //同上
        ptrR[x*3+1] = 0;
      }
    }
    bmpR->SaveToFile("C:\\R.bmp");   //保存
    bmpG->SaveToFile("C:\\G.bmp");
    bmpB->SaveToFile("C:\\B.bmp");
    delete bmpR;                    
    delete bmpG;
    delete bmpB;
}
BCB6.0测试通过,合并也差不多,改改就行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表