从HDC转换到leptonica PIX
void CAssistDlg::OnBnClickedTest()
{
HDC hdc = ::GetDC(NULL);
HDC hdcMem = CreateCompatibleDC(hdc);
HBITMAP hBmpMem = CreateCompatibleBitmap(hdc, , );
HBITMAP hBmpOld = (HBITMAP)SelectObject(hdcMem, hBmpMem);
BitBlt(hdcMem, , , , , hdc, , , SRCCOPY); {
HDC hdcThis = GetDC()->GetSafeHdc();
BitBlt(hdcThis, , , , , hdcMem, , , SRCCOPY); BITMAP bmp = {};//BITMAPINFO;BITMAPINFOHEADER;
int ret = ::GetObject(hBmpMem, sizeof(bmp), &bmp); BITMAPINFOHEADER bmi = {};
bmi.biSize = sizeof(bmi);
bmi.biWidth = bmp.bmWidth;
bmi.biHeight = -bmp.bmHeight;
bmi.biPlanes = bmp.bmPlanes;
bmi.biBitCount = bmp.bmBitsPixel;
bmi.biSizeImage = bmp.bmWidth * bmp.bmHeight * bmp.bmBitsPixel / ;
bmi.biCompression = BI_RGB; BYTE *pBuf = new BYTE[bmi.biSizeImage];
int ret2 = GetDIBits(hdcMem, hBmpMem, , bmp.bmHeight, pBuf, (BITMAPINFO*)&bmi, DIB_RGB_COLORS); for (int i = ;i < bmp.bmHeight;++i)
{
for (int j = ;j < bmp.bmWidth;++j)
{
BYTE r = pBuf[j * + i * bmp.bmWidthBytes + ];
BYTE g = pBuf[j * + i * bmp.bmWidthBytes + ];
BYTE b = pBuf[j * + i * bmp.bmWidthBytes + ]; pBuf[j * + i * bmp.bmWidthBytes + ] = r; //r
pBuf[j * + i * bmp.bmWidthBytes + ] = g; //g
pBuf[j * + i * bmp.bmWidthBytes + ] = b; //b
pBuf[j * + i * bmp.bmWidthBytes + ] = 0xff; //a
}
} PIX pix = {};
pix.w = bmp.bmWidth;
pix.h = bmp.bmHeight;
pix.informat = IFF_BMP;
pix.d = bmp.bmBitsPixel;
pix.wpl = bmp.bmWidthBytes / ;
pix.data = (l_uint32 *)pBuf;
pix.refcount = ;
pixWrite("D:\\pix.bmp", &pix, IFF_BMP); delete []pBuf;
} SelectObject(hdcMem,hBmpOld);
DeleteDC(hdcMem);
DeleteObject(hBmpMem);
::ReleaseDC(NULL, hdc);
}
从HDC转换到leptonica PIX的更多相关文章
- cisco-GNS3-pix防火墙基本配置实操(持续更新)
一.ASA和PIX基础配置 1.ASA防火墙配置 1.GNS配置 因为使用的GNS3的版本可能不同,gns配置asa防火墙的步骤可能不同 在低版本的gns中直接在qemu选项里可以直接配置,参考:ht ...
- CDC和HDC的区别与转换
CDC和HDC的区别与转换 一.区别与联系HDC是句柄:CDC是MFC封装的Windows 设备相关的一个类:CClientDC是CDC的衍生类,产生对应于Windows客户区的对象HDC是WIN ...
- VC++ 中CDC与HDC的区别以及二者之间的转换
MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的DC的基类.常用的CClientDC dc(this);就是CDC的子类(或称派 ...
- VC中CDC与HDC的区别以及二者之间的转换
CDC是MFC的DC的一个类 HDC是DC的句柄,API中的一个类似指针的数据类型. MFC类的前缀都是C开头的 H开头的大多数是句柄 这是为了助记,是编程读\写代码的好的习惯. CDC中所有MFC的 ...
- C# 与 C++ 数据类型比较及结构体转换
引自:http://www.blogjava.net/heting/archive/2010/03/20/315998.html C++ C# =============== ...
- 使用Canvas把照片转换成素描画
原文:http://www.alloyteam.com/2012/07/convert-picture-to-sketch-by-canvas/ 腾讯的alloy team写的一个素描效果,挺不错的. ...
- c# 刻度:毫米 英寸 像素转换
从目前所掌握的资料来看,c#程序中将毫米转换像素的方法无非两种: 第一种: 1: /// <summary> 2: /// 以毫米为单位的显示宽度 3: /// </summary& ...
- leptonica 学习笔记1
Updated: April 26, 2015 Leptonica is a pedagogically-oriented open source site containing software t ...
- leptonica使用问题
想要使用leptonica编写一个图像处理程序,或者调用leptonica/prog下例子程序,出现类似错误: leptTest ./test Error in pixReadStreamJpeg: ...
随机推荐
- iis 反向代理 组件 Application Request Route
安装后要重启服务器. 不然 IIS 不会生效.
- 什么是阻塞式和非阻塞io流?
阻塞IO:socket 的阻塞模式意味着必须要做完IO 操作(包括错误)才会返回. 非阻塞IO:非阻塞模式下无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功. 两者区别: 所谓阻塞 ...
- java 加密解密
https://www.cnblogs.com/kingsleylam/category/752546.html <java加密与解密艺术>代码可抄袭.
- JVM基本配置与调优
JVM基本配置与调优 JVM调优,一般都是针对堆内存配置调优. 如图:堆内存分新生代和老年代,新生代又划分为eden区.from区.to区. 一.区域释义 JVM内存模型,堆内存代划分为新生代和老年代 ...
- Docker-初始docker
一.什么是Docker Docker 在容器的基础上,进行了进一步的封装,从文件系统.网络互联到进程隔离等等,极大的简化了容器的创建和维护.使得 Docker 技术比虚拟机技术更为轻便.快捷. 下面的 ...
- Python学习笔记之函数参数传递 传值还是传引用
在学完Python函数那一章节时,很自然的的就会想到Python中函数传参时传值呢?还是传引用?或者都不是? 在回答上面的问题之前我们先来看看下面的代码: 代码1: def foo(var): v ...
- 创建squashfs
SquashFS 通常的livecd都有一个这个文件,是核心的文件系统 SquashFS 也是一个只读的文件系统,它可以将整个文件系统压缩在一起,存放在某个设备,某个分区或者普通的文件中.如果您将其压 ...
- 20145216史婧瑶《Java程序设计》第一次实验报告
实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没 ...
- CentOS 64位系统 yum安装32位软件包的方法
//假如你要安装libjpeg的32位版本 1.查询具体的32位版本,然后安装 yum search libjpeg.i686 yum -y install libjpeg.i386 2.一劳永逸的方 ...
- cogs 341:[NOI2005] 聪聪与可可
★★ 输入文件:cchkk.in 输出文件:cchkk.out 简单对比 时间限制:1 s 内存限制:256 MB [问题描述] 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小 ...