HBITMAP 保存为JPG格式
来源:互联网 发布:linux open函数 编辑:程序博客网 时间:2024/04/27 14:27
HBITMAP 保存为JPG格式
http://blog.csdn.net/qq7183316/archive/2011/05/17/6425887.aspx
// 下载了ijl库,看了看说明文档和例子程序而写下的例子。
#include <windows.h>
#include "ijl.h" // 包含ijl.h文件,并在VC中设置包含入静态ijl15l.lib库或动态ijl15.lib库
// 将hBitmap图像转换成内存DIB数据图像。
BYTE* CreateFromHBITMAP(HBITMAP hBitmap)
{
HDC hdc=GetDC(NULL);
HDC memdc=CreateCompatibleDC(hdc);
SelectObject(memdc,hBitmap);
BITMAP bm;
GetObject(hBitmap,sizeof(BITMAP),&bm);
BITMAPINFO bi;
bi.bmiHeader.biSize=sizeof(bi.bmiHeader);
bi.bmiHeader.biWidth=bm.bmWidth;
bi.bmiHeader.biHeight=bm.bmHeight;
bi.bmiHeader.biPlanes=1;
bi.bmiHeader.biBitCount=24;
bi.bmiHeader.biCompression=BI_RGB;
bi.bmiHeader.biSizeImage=0;
bi.bmiHeader.biXPelsPerMeter=bm.bmWidth;
bi.bmiHeader.biYPelsPerMeter=bm.bmHeight;
bi.bmiHeader.biClrUsed=0;
bi.bmiHeader.biClrImportant=0;
int bitsize=bm.bmWidth*bm.bmHeight*3;
BYTE* buff=new BYTE[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + bitsize];
BYTE* tmpbuff = buff;
RtlZeroMemory(buff,sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO) + bitsize);
BITMAPFILEHEADER bf;
bf.bfType=0x4d42;
bf.bfSize=bitsize+14+sizeof(BITMAPINFOHEADER);
bf.bfOffBits=sizeof(bi.bmiHeader)+sizeof(bf);
bf.bfReserved1=0;
bf.bfReserved2=0;
RtlMoveMemory(tmpbuff,&bf,sizeof(BITMAPFILEHEADER));
tmpbuff += sizeof(BITMAPFILEHEADER);
RtlMoveMemory(tmpbuff,&bi,sizeof(BITMAPINFO));
tmpbuff += sizeof(BITMAPINFO);
GetDIBits(memdc,hBitmap,0,bm.bmHeight,tmpbuff,&bi,DIB_PAL_COLORS);
DeleteObject(memdc);
ReleaseDC(0,hdc);
return buff;
}
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpCmdLine,
int nShowCmd)
{
BYTE* pBuff,*pJpgBuf;
BITMAP bm;
JPEG_CORE_PROPERTIES jcp;
// 自己添加的测试用的图像
HBITMAP hBitmap = LoadBitmap(GetModuleHandle(NULL),(char*)101);
// 将hBitmap图像句柄转换成DIB图像
pBuff = CreateFromHBITMAP(hBitmap);
// 获取图像头信息
GetObject(hBitmap,sizeof(BITMAP),&bm);
// 初始化ijl库
ijlInit(&jcp);
// 初始化ijl JPEG_CORE_PROPERTIES结构
jcp.DIBBytes = (UCHAR *)pBuff;
jcp.DIBHeight = bm.bmHeight;
jcp.DIBWidth = bm.bmWidth;
jcp.DIBPadBytes = IJL_DIB_PAD_BYTES(jcp.DIBWidth,jcp.DIBChannels);
// 新建一个保存转换后的jpg数据缓冲。
pJpgBuf = new BYTE[jcp.DIBWidth * jcp.DIBHeight * 3 + sizeof(BITMAPINFO) + sizeof(BITMAPFILEHEADER)];
// 数据缓冲清零初始化
RtlZeroMemory(pJpgBuf,jcp.DIBWidth * jcp.DIBHeight * 3 + sizeof(BITMAPINFO) + sizeof(BITMAPFILEHEADER));
// 继续初始化ijl JPEG_CORE_PROPERTIES结构
jcp.JPGBytes = pJpgBuf;
jcp.JPGHeight = bm.bmHeight;
jcp.JPGWidth = bm.bmWidth;
jcp.JPGSizeBytes = jcp.DIBWidth * jcp.DIBHeight * 3 + sizeof(BITMAPINFO) + sizeof(BITMAPFILEHEADER);
// 将BMP DIB数据压缩成JPG数据
ijlWrite(&jcp,IJL_JBUFF_WRITEWHOLEIMAGE);
// 创造一个*.jpg文件
HANDLE hFile=CreateFile("a.jpg",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
DWORD num=0;
SetFilePointer(hFile,0,NULL,0);
// 写入JPG数据到*.jpg文件。
WriteFile(hFile,pJpgBuf,jcp.JPGSizeBytes,&num,NULL);
// 内存BMP DIB数据转换JPG成功,打扫清除对象操作
MessageBox(0,"转换成功!","BMP转JPG",MB_OK);
CloseHandle(hFile);
ijlFree(&jcp);
delete pBuff;
delete pJpgBuf;
return 0;
}
- HBITMAP 保存为JPG格式
- actionscript3保存为jpg格式
- 将HBITMAP保存为文件
- 由HBITMAP保存为图片
- asctionscript3 保存jpg格式。
- 保存为BMP,Jpg,Png格式的图片
- QT4.6中将QImage保存为JPG格式
- Picture控件显示图片保存为BMP,JPG等格式
- QT4.6中将QImage保存为JPG格式
- java:截屏并保存为jpg格式
- C++将HBITMAP保存为bmp图片
- CDR怎么保存JPG格式
- 将网页保存为jpg
- VB60用 GDI+保存为JPG/TIFF/PNG/GIF/BMP等格式
- 改写一个截屏函数,可指定保存目录,存为JPG格式图片
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- VB6.0用GDI+保存图片为JPG、TIFF、PNG、GIF、BMP等格式
- VB6.0用GDI+保存图像为BMP\JPG\PNG\GIF格式终结版。
- C#中textbox只能输入数字
- Android中包含多个Activity的应用退出按钮实现
- 关于用typedef定义结构体类型
- 临床路径实施难点探讨
- ping不通 虚拟机
- HBITMAP 保存为JPG格式
- 广州公安局综合办证厅地址
- sudo的环境变量获取
- Enterprise Linux5 配置Samba服务器
- 广州出生婴儿登记入户程序
- RGB图像数据字符叠加,图像压缩(ijl库),YUV转RGB
- sharepoint安装
- 关于自动填写表单的操作
- 线性代数matrix相乘中顺序的变化