设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

十全大补:CxImage图像处理类库

2009-3-6 09:19| 发布者: joejoe0332| 查看: 15281| 评论: 0

  CxImgLib.dsw工作空间

 在相同的工作空间中,你可以找到用于构建不同库和应用程序的项目:
  ·CxImage : cximage.lib - 静态库
  ·CxImageCrtDll : cximagecrt.dll - DLL,不使用MFC
  ·CxImageMfcDll : cximage.dll - DLL,使用MFC
  ·Demo : 示例程序demo.exe,跟cximage.lib和C库链接。
  ·DemoDll : demodll.exe - 跟cximagecrt.dll链接
  ·libdcr,jasper,jbig,jpeg,png,tiff,zlib : 静态的C库
  构建这些项目需要几分钟时间,当所有项目构建完成后,你可以选择demo项目并执行应用程序。

  要想在你自己的项目中使用CxImage,你必须编辑下面这些项目设置设置(针对Visual C++ 6.0):
 
  Project Settings(项目设置)
   |- C/C++
   |   |- Code Generation
   |   |   |- 运行时库 : 多线程DLL(所有链接的库都必须使用相同的设置)
   |   |   |- 结构成员对齐方式 : 所有链接的库都必须相同
   |   |- 预编译头文件 : 不使用预编译头文件
   |   |- 预处理器:
   |       |- 添加额外的包含(Include)路径:  ..\cximage
   |- Link
    |- General
        |- Object/library modules(附加的依赖库): ../png/Debug/png.lib 
                                   ../raw/Debug/libdcr.lib
                                   ../jpeg/Debug/jpeg.lib
                                   ../zlib/Debug/zlib.lib
                                   ../tiff/Debug/tiff.lib
                                   ../jasper/Debug/jasper.lib
                                   ../cximage/Debug/cximage.lib  ...

  在你的源代码中,你必须引入CxImage的头文件ximage.h。在你的代码中添加如下语句:
#include "ximage.h"。
  注意,不要混合debug和release模块,每个配置必须使用各自相应的库文件。

  在CxImage中添加自定义的函数

   为CxImage添加一个新的图像处理函数并不困难。在这里,我将以CxImage::Jitter为例子,描述如何为CxImage添加自定义的函数。虽然这个函数很简单, 但是它却展示了使用CxImage时所需要注意的方方面面。

  首先,我们需要声明这个函数:

bool Jitter(long radius=2)

  在ximage.h头文件的CXIMAGE_SUPPORT_DSP部分,你可以在public区域的任何部分声明这个函数。

  现在,我们开始定义这个函数:

bool CxImage::Jitter(long radius)
{
    
// 检查图像是否合法,这应当是这个函数的第一行
    if (!pDib) return false;
    
    
// 局部变量
    long nx,ny;
    
    
// 临时图像,用于存储算法的部分结果
    CxImage tmp(*this,pSelection!=0,true,true);
    
    
// 限制函数仅仅作用在选区(通过Selection...()函数定义)的最小区域
    
// 这将加快整个循环的速度,提高算法效率
    long xmin,xmax,ymin,ymax;
    
if (pSelection){
        xmin
= info.rSelectionBox.left; xmax = info.rSelectionBox.right;
        ymin
= info.rSelectionBox.bottom; ymax = info.rSelectionBox.top;
    }
else {
        xmin
= ymin = 0;
        xmax
= head.biWidth; ymax=head.biHeight;
    }
    
    
// 主循环 : 垂直方向扫描图像
    for(long y=ymin; y <ymax; y++){
    
        
// 监视循环的进度
        info.nProgress = (long)(100*y/head.biHeight);
    
        
// 检查应用程序是否已经退出
        if (info.nEscape) break;
    
        
// 主循环 : 水平方向扫描图像
        for(long x=xmin; x<xmax; x++){
    
        
// 如果选区功能启用了,则仅仅处理选区内部的像素
#if CXIMAGE_SUPPORT_SELECTION
            
if (SelectionIsInside(x,y))
#endif //CXIMAGE_SUPPORT_SELECTION
            {
                
// 主算法
                nx=x+(long)((rand()/(float)RAND_MAX - 0.5)*(radius*2));
                ny
=y+(long)((rand()/(float)RAND_MAX - 0.5)*(radius*2));
                
if (!IsInside(nx,ny)) {
                    nx
=x;
                    ny
=y;
                }

                
// 保存结果到临时图像中.
                
// 如果可以,24位图像请使用PixelColor,
                
// 而8,4和1位图像请使用PixelIndex,这样可以加快速度。
                if (head.biClrUsed==0){
                    tmp.SetPixelColor(x,y,GetPixelColor(nx,ny));
                }
else {
                    tmp.SetPixelIndex(x,y,GetPixelIndex(nx,ny));
                }

                
// 如果启用了透明度功能,则处理透明图层中的像素
#if CXIMAGE_SUPPORT_ALPHA
                tmp.AlphaSet(x,y,AlphaGet(nx,ny));
#endif //CXIMAGE_SUPPORT_ALPHA

            }
        }
    }

    
// 保存结果并退出
    Transfer(tmp);
    
return true;
}


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部