zoukankan
html css js c++ java
DDB to DIB
bool
CCStaticDrawDlg::SaveBitmapFile(CString strFileName, CBitmap
&
bmp,CDC
*
pdc)
{
BITMAP bm;
bmp.GetBitmap (
&
bm);
int
nWidth
=
bm.bmWidth;
int
nHeight
=
bm.bmHeight;
int
nLineBits
=
bm.bmWidthBytes;
if
((nLineBits
%
8
)
!=
0
)
nLineBits
+=
8
-
nLineBits
%
8
;
int
nBitCounts
=
nLineBits
*
bm.bmHeight ;
int
nBits
=
24
;
//
bm.bmBitsPixel;
int
nBitmapInfoSize
=
0
;
if
(nBits
<=
8
)
{
int
nColors
=
1
<<
nBits;
int
nPalUnitSize
=
sizeof
(RGBQUAD);
nBitmapInfoSize
=
sizeof
(BITMAPINFOHEADER)
+
nPalUnitSize
*
nColors;
}
else
nBitmapInfoSize
=
sizeof
(BITMAPINFOHEADER);
BITMAPINFO
*
pbmpinfo
=
NULL;
pbmpinfo
=
(BITMAPINFO
*
)(
new
BYTE[nBitmapInfoSize]);
ZeroMemory((
void
*
)pbmpinfo,nBitmapInfoSize);
BITMAPINFOHEADER
*
pInfoHead
=
(BITMAPINFOHEADER
*
)pbmpinfo;
ZeroMemory((
void
*
)pInfoHead,
sizeof
(BITMAPINFOHEADER));
pInfoHead
->
biSize
=
sizeof
(BITMAPINFOHEADER);
pInfoHead
->
biBitCount
=
nBits;
pInfoHead
->
biPlanes
=
1
;
pInfoHead
->
biSizeImage
=
nBitCounts;
pInfoHead
->
biCompression
=
BI_RGB;
pInfoHead
->
biWidth
=
nWidth;
pInfoHead
->
biHeight
=
nHeight;
CDC dc;
dc.CreateDC(
"
DISPLAY
"
,NULL,NULL,NULL);
int
nLx
=
dc.GetDeviceCaps (LOGPIXELSX);
int
nLy
=
dc.GetDeviceCaps (LOGPIXELSY);
double
dbInchPerMeter
=
39.375
;
int
nPMx
=
(
int
)((
double
)nLx
*
dbInchPerMeter);
int
nPMy
=
(
int
)((
double
)nLy
*
dbInchPerMeter);
pInfoHead
->
biXPelsPerMeter
=
nPMx;
//
3780;
pInfoHead
->
biYPelsPerMeter
=
nPMy;
//
3780;
if
(nBits
<=
8
)
{
int
nColors
=
1
<<
nBits;
GetDIBColorTable(dc.m_hDC,
0
,nColors,pbmpinfo
->
bmiColors);
}
BYTE
*
pBits
=
NULL;
//
HGLOBAL hGlobal = ::GlobalAlloc(GMEM_FIXED, nBitCounts);
//
pBits = (BYTE *)::GlobalLock(hGlobal);
pBits
=
new
byte
[nBitCounts];
ZeroMemory((
void
*
)pBits,nBitCounts);
GetDIBits(pdc
->
m_hDC,(HBITMAP)bmp,
0
,nHeight,pBits,pbmpinfo,DIB_RGB_COLORS);
BITMAPFILEHEADER bmfHeader;
int
nFileHeadSize
=
sizeof
(BITMAPFILEHEADER);
ZeroMemory((
void
*
)
&
bmfHeader,
sizeof
(BITMAPFILEHEADER));
bmfHeader.bfType
=
19778
;
//
'BM' ((WORD) ('M' << 8) | 'B');
bmfHeader.bfSize
=
nFileHeadSize
+
nBitmapInfoSize
+
nBitCounts;
bmfHeader.bfOffBits
=
sizeof
(BITMAPFILEHEADER)
+
nBitmapInfoSize;
CFile file;
if
(
!
file.Open (strFileName,CFile::modeCreate
|
CFile::modeWrite))
{
AfxMessageBox(
"
Write File Error!
"
);
return
FALSE;
}
file.Write (
&
bmfHeader,
sizeof
(BITMAPFILEHEADER));
file.Write (pbmpinfo,nBitmapInfoSize);
file.WriteHuge(pBits, nBitCounts);
file.Close ();
delete pBits;
//
::GlobalUnlock (hGlobal);
//
::GlobalFree (hGlobal);
delete[] pbmpinfo;
return
TRUE;
}
查看全文
相关阅读:
测试的基本方法
一些基本常用的正则表达式
MySQL和Oracle的区别与不同
Ubuntu中使用python3中的venv创建虚拟环境
在Ubuntu中搭建Python3的虚拟环境并开始django项目
Django中的图片加载不出来解决方式记录
在django中进行后台管理时插入外键数据时不显示值的问题
Django2.2连接mysql数据库出现django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None问题
在Ubuntu中安装了MongoDB后无法启动mongod的问题
PostgreSQL练习3
原文地址:https://www.cnblogs.com/wqj1212/p/1047159.html
最新文章
java类和对象详解
HashMap集合-遍历方法
HashMap集合排序方法
Oracle(11g)详细安装步骤
小菜鸟之数据库
Java基础部分 2
小菜鸟之游标
小菜鸟之oracle
小菜鸟之crond
小菜鸟之liunx
热门文章
小菜鸟之shell
小菜鸟之oracle触发器
小菜鸟之java基础
小菜鸟之SSM框架
1000行基本SQL
MySQL5.6解压版服务无法启动—系统错误1067
SVN的各种符号含义,svn的星号,感叹号,问号等含义
innerHTML和innerText的区别
Oracle中REGEXP_SUBSTR函数
Linux命令中dd的作用
Copyright © 2011-2022 走看看