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

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;
}

示例: 如何转换一种格式到另外一种格式 

CxImage  image;
// bmp -> jpg
image.Load("image.bmp", CXIMAGE_FORMAT_BMP);
if (image.IsValid()){
    if(!image.IsGrayScale()) image.IncreaseBpp(24);
    image.SetJpegQuality(80);
    image.Save("image.jpg",CXIMAGE_FORMAT_JPG);
}
// png -> tif
image.Load("image.png", CXIMAGE_FORMAT_PNG);
if (image.IsValid()){
    image.Save("image.tif",CXIMAGE_FORMAT_TIF);
}

  如何从资源中加载图像

//Load the resource IDR_PNG1 from the PNG resource type
CxImage* newImage = new CxImage();
newImage->LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDR_PNG1),
                       "PNG"),CXIMAGE_FORMAT_PNG);
或者
//Load the resource IDR_JPG1 from DLL
CxImage* newImage = new CxImage();
HINSTANCE hdll=LoadLibrary("imagelib.dll");
if (hdll){
    HRSRC hres=FindResource(hdll,MAKEINTRESOURCE(IDR_JPG1),"JPG");
    newImage->LoadResource(hres,CXIMAGE_FORMAT_JPG,hdll);
    FreeLibrary(hdll);
}
或者
//Load a bitmap resource;
HBITMAP bitmap = ::LoadBitmap(AfxGetInstanceHandle(),
                           MAKEINTRESOURCE(IDB_BITMAP1)));
CxImage *newImage = new CxImage();
newImage->CreateFromHBITMAP(bitmap);

 

转载于:https://www.cnblogs.com/carekee/articles/2174673.html

CxImage图像处理类库说明3(转载)相关推荐

  1. CxImage图像处理类库

    转自:http://blog.csdn.net/byxdaz/archive/2009/04/10/4061324.aspx CxImage是一个可以用于MFC 的C++图像处理类库类,它可以打开,保 ...

  2. Visual C++ 图像处理类库CxImage源代码

    说明:VC++ 图像处理类库CxImage源代码,CxImage是一个可以用于MFC 的C++类,可以打开,保存,显示,转换 各种格式的图像文件,比如BMP, JPEG, GIF, PNG, TIFF ...

  3. Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx

    Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx 1. 安装的原理,主要是解压,复制,设置三大步1 2. 目前我们常见的三大种安装模式,二进制模式与源码安装模 ...

  4. java 识别图片 边框_atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本...

    atitit.验证码识别step3----去除边框----图像处理类库 attilax总结java版本 1. 去除边框思路原理 图像裁剪::从图片的Positions.CENTER,wid,hit)裁 ...

  5. cd库图像处理php,PHP图像处理类库及演示分享

    简单写了一个PHP的图像处理类库,虽然功能比较少,但是目前也没用到太高级的,以后用到了再填吧,或者哪位给点建议加上什么功能,或者有什么需求可以跟我说,我有时间加上,如果哪位对这个类库进行了扩展的话,还 ...

  6. HTML5/JavaScript 图像边缘羽化— 打造图像处理类库第二步

    由于之前略忙,主要也还是因为自己太懒,拖了好久才把这篇博客写完.这篇博客是关于图像边缘羽化(柔化)的,也是 JavaScript 图像处理这一系列的第二篇.上一篇是关于Gamma校正的,有兴趣的朋友可 ...

  7. matlab 图像处理 新浪 应变,[转载]Matlab图像处理小结

    经常做做图像处理的东西,时间长了,有些函数就忘了,看到网上有人总结,收藏了. 1. 图像和图像数据 缺省情况下,MATLAB将图像中的数据存储为双精度类型(double),64位浮点数,所需存储量很大 ...

  8. dNet图像处理组件学习总结

    关于.NET下开源及商业图像处理(PSD)组件 http://www.cnblogs.com/Leo_wl/archive/2013/03/21/2973299.html [原创].NET开源压缩组件 ...

  9. CC++图形图像处理开源库

    Google三维APIO3D O3D 是一个开源的 WebAPI 用来在浏览器上创建界面丰富的交互式的 3D 应用程序.这是一种基于网页的可控3D标准.此格式期望真正的基于浏览器,独立于操作系统之外, ...

最新文章

  1. 【转载】xmind的使用安装方法
  2. CentOS 修改/etc/resolv.conf 重启network后又恢复到原来的状态
  3. PHP-SESSION深入理解
  4. python使用json实现树结构_js怎样将获取json转换为树形结构
  5. 导数卷积 (NTT)
  6. ffmpeg - AVPacket内存问题分析(AVFrame一样的)
  7. 用Java实现一个简单的链表迭代器
  8. 新疆特岗计算机考试题,2020新疆特岗教师笔试资料领取(小学信息技术)
  9. SQL注入-布尔盲注
  10. 还敢吹「毫无PS痕迹」?小心被Adobe官方AI打脸
  11. oracle unused 语法_【转】Oracle set unused的用法
  12. 视频中场的概念(1080I和1080P)和BT601/656/709/1120/2020/2077
  13. WordPress中导入图片模糊
  14. Unity跳一跳小游戏简单代码
  15. 【Mac实用技巧】Mac如何修复YouTube视频黑屏现象?
  16. 联想服务器pe进系统还原,传授联想如何一键还原系统
  17. java审计之XXE
  18. 网络安全与渗透:内网渗透,Cobalt_Strike(十三)此生无悔入华夏,男儿何不带吴钩
  19. cmake时添加-fPIC编译选项
  20. 能一次进临界区的时候,不要多次进入

热门文章

  1. 分享一道阿里Java并发面试题 (详细分析篇)
  2. Go会接替Java,成为下一个企业级编程语言吗?
  3. 不懂算法,还想进大厂?做梦吧
  4. MyBatis+Spring MVC开发指南(一)
  5. Spring Boot 最核心的 3 个注解详解
  6. Java线程详解(1)-概念与原理
  7. Java集合:ArrayList和LinkedList区别?
  8. Redis:内存满了的解决方案
  9. Python list列表的使用(增删改查)
  10. php未正确拼写字 css,前端Bug解决方案