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;
}
查看全文
相关阅读:
Zend Studio使用
iOS中block实现的探究
用python演示一个简单的AST(抽象语法树)
Cocos2D-x权威指南: CCNode类方法:
ListView的优化
可变參数
android媒体--stagefright概述【一】
flume安装及配置
linux包之sysstat之mpstat与pidstat命令
Java实现第十届蓝桥杯等差数列
原文地址:https://www.cnblogs.com/wqj1212/p/1047159.html
最新文章
多区域显示(8)-透明花边
装饰者模式
华为面试题算什么,这个背会了外企随便进
C语言中volatilekeyword的作用
数据挖掘十大经典算法(9) 朴素贝叶斯分类器 Naive Bayes
怎样对ListView的项进行排序
高速排序算法
exosip
setTimeout() 实现程序每隔一段时间自己主动运行
HDU 4825 Xor Sum
热门文章
ECCV 2014 Results (16 Jun, 2014) 结果已出
html中滚动栏的样式
iOS上使用自己定义ttf字体
QQclient团队博客
Flex4+spring+hibernate+BlazeDS整合案例
node.js第11课(HTTPclient)
android WebView总结
js时间戳转为日期格式
Linux下通配符总结
Android学习路线(二十七)键值对(SharedPreferences)存储
Copyright © 2011-2022 走看看