从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: ...
随机推荐
- SQL Server语句创建数据库和表——并设置主外键关系
简单的创建数据库的 SQL 语句: use master go if exists(select * from sysdatabases where name='Test') begin select ...
- Linux 网络 I/O 模型简介(图文)
1.介绍 Linux 的内核将所有外部设备都看做一个文件来操作(一切皆文件),对一个文件的读写操作会调用内核提供的系统命令,返回一个file descriptor(fd,文件描述符).而对一个sock ...
- matlab和mathematics最新的FTP地址
https://dio.obspm.fr/interne/logiciels/matlab/ 分享一个地址,非常好的FTP网站.
- playbook管理配置文件
前言:在生产环境中,经常需要更改多台机器配置文件,所以用playbook来实现nginx配置文件的管理 一.更新nginx配置文件并重新加载 1. 创建对应目录结构 mkdir -p /etc/ans ...
- $ MySQL-python数据库模块用法
本文主要介绍在python中如何使用MySQL数据库. 准备工作 安装mysql Linux (Ubuntu) apt-get install mysql-server 安装完成之后在命令行中输入:m ...
- linux下多线程之pthread_detach(pthread_self())
写个碰到的问题,记录下自己的技术之路点滴pthread_detach(pthread_self())linux线程执行和windows不同,pthread有两种状态joinable状态和unjoina ...
- Storm概念讲解,工作原理
一.storm是一个用于实时流式计算的分布式计算引擎,弥补了Hadoop在实时计算方面的不足(Hadoop在本质上是一个批处理系统). 二.storm在实际应用场景中的位置一般如下: 其中的编号1~5 ...
- Python面试题之Python生成器
首先说明一下生成器也是迭代器,也有迭代器的那些优点. 那为什么要生成器呢?因为到目前为止都 不是你写的迭代器,都是别人定义好的.那如何自己去造一个迭代器呢?下面的内容就会给你答案. 想要自己造一个迭代 ...
- CSS 媒体类型
CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 一.媒体类型 一些CSS属性只设计了某些媒体.例如"voice ...
- poj-2259 team queue(数据结构)
第一遍看的时候立即想到了哈希表. 再想时觉得两个队列,一个用来排队伍之间的顺序,一个用来排队伍内部成员的顺序即足够了. DEQUE的时候先判断哪只队伍排在队首,之后再让该队伍中的首队员出列. 整体没有 ...