📄 csdn_文档中心_改变位图颜色深度.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0052)http://www.csdn.net/develop/Read_Article.asp?id=4025 -->
<!--内容开始//--><HTML><HEAD><TITLE>CSDN_文档中心_改变位图颜色深度</TITLE>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR>
<META content="text/html; charset=gb2312" http-equiv=Content-Type><LINK
href="CSDN_文档中心_改变位图颜色深度.files/csdn.css" rel=stylesheet></HEAD>
<BODY bgColor=#ffffff leftMargin=0 topMargin=0 marginheight="0" marginwidth="0">
<DIV align=center>
<STYLE>.title0 {
COLOR: #ffffff; FONT-FAMILY: arial; FONT-SIZE: 17px; FONT-WEIGHT: bold; TEXT-DECORATION: none
}
A.title2:link {
COLOR: #000000; TEXT-DECORATION: none
}
A.title2:visited {
COLOR: #000000; TEXT-DECORATION: none
}
A.title2:active {
COLOR: #ff0000; TEXT-DECORATION: none
}
A.title2:hover {
COLOR: #ff0000; TEXT-DECORATION: none
}
</STYLE>
<SCRIPT language=JavaScript>
<!--
function submitlog(sign)
{
var types=document.alogon.type.options[document.alogon.type.selectedIndex].value;
if (document.alogon.name.value!="" && document.alogon.pass.value!="")
{
if (types!="1")
document.alogon.action="http://www.csdn.net/member/logon.asp";
else
document.alogon.action="http://expert.csdn.net/member/logon.asp";
if(sign)
document.alogon.submit();
//return true;
}
else
{
if (document.alogon.name.value=="")
alert("请输入用户名!");
if (document.alogon.pass.value=="")
alert("请输入密码");
return false;
}
return true;
}
function GetMyPass()
{
if (document.alogon.name.value!="")
{
document.alogon.action="http://www.csdn.net/member/getpass.asp";
document.alogon.submit();
}
else
{
alert("请在姓名输入框里输入用户名或注册EMAIL!");
}
}
// -->
</SCRIPT>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
<TBODY>
<TR>
<TD bgColor=#004d99 height=25 width=20></TD>
<TD bgColor=#004d99> <A
href="http://www.csdn.net/member/login.asp"><FONT color=#ffff33>登
录..</FONT></A> <A href="http://www.csdn.net/member/zc.asp"
target=_blank><FONT color=#ffff33>[注 册]</FONT></A> <A
href="http://www.csdn.net/member/login.asp"><FONT
color=#ffff33>忘记密码</FONT> </A> <A
href="http://www.csdn.net/member/logonout.asp"><FONT
color=#ffff33>注销登录</FONT> </A></TD>
<TD align=right bgColor=#990000 width=20><IMG height=25
src="CSDN_文档中心_改变位图颜色深度.files/top_1.gif" width=20></TD>
<FORM action=http://www.csdn.net/search_ok.asp method=post target=_blank>
<TD align=right bgColor=#009999 width=250><FONT color=#ffffff><FONT
color=#ffffff><INPUT class=FormText_1 name=search size=15> <SELECT
class=FormText_1 name=type> <OPTION selected value=1>新闻标题</OPTION>
<OPTION value=2>软件名称</OPTION> <OPTION value=3>商品名称</OPTION> <OPTION
value=4>文档标题</OPTION> <OPTION value=6>职位名称</OPTION></SELECT> </FONT><INPUT class=td3 name=Submit type=submit value="搜 索">
</FONT></TD></FORM></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
<TBODY>
<TR>
<TD align=middle height=70 width=150><IMG height=60
src="CSDN_文档中心_改变位图颜色深度.files/csdn.gif" width=120></TD>
<TD align=middle width=470>
<SCRIPT language=javascript>
var rand = Math.random().toString();
var ordval = parseInt(rand.substring(2,4));
function Showad(width)
{
if(width=='468')
{
document.write("<a href='http://www.dearbook.com.cn/' target='_blank'><OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' WIDTH=468 HEIGHT=60><PARAM NAME=movie VALUE='/adv//468x60.swf'> <PARAM NAME=quality VALUE=high> <EMBED src='/adv//468x60.swf' quality=high border=0 WIDTH=468 HEIGHT=60 TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></EMBED></OBJECT></a>");
return;
}
if(width=='120')
{
document.write("<a href='http://www.csdn.net/csdn/csdnClick.aspx?ad=Oracle-button1&adurl&adurl=http://www.oracle.com/global/cn/documentation/10g/index.html?content.html' target='_blank'><img src='/adv/develop/grid_computing_120x60_text1.gif' width=120 HEIGHT=60 border=0></a>");
return;
}
return;
}
Showad('468')</SCRIPT>
</TD>
<TD align=middle width=150>
<SCRIPT>Showad('120')</SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#000000 colSpan=2 height=1 width=770></TD></TR>
<TR>
<TD align=middle bgColor=#004d99 height=28 width=150><FONT
class=title0>csdn.net</FONT></TD>
<TD align=middle width=620>
<SCRIPT src="CSDN_文档中心_改变位图颜色深度.files/navigation1.js"></SCRIPT>
</TD></TR>
<TR>
<TD align=middle bgColor=#000000 colSpan=2 height=1
width=770></TD></TR></TBODY></TABLE>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=770>
<TBODY>
<TR>
<TD bgColor=#f3f9fc height=23 width=10></TD>
<TD bgColor=#f3f9fc>
<MARQUEE onmouseout=this.start() onmouseover=this.stop() scrollAmount=5
scrollDelay=80>
<SCRIPT src="CSDN_文档中心_改变位图颜色深度.files/marquee.htm"></SCRIPT>
</MARQUEE></TD>
<TD align=right bgColor=#f3f9fc width=101>
<SCRIPT>document.write("<img src=http://count.csdn.net/count/pageview1.asp?columnid=4&itemid=11 border=0 width=0 height=0>");</SCRIPT>
<B>
<SCRIPT language=JavaScript>
<!--
document.ns = navigator.appName == "Netscape"
tmpDate = new Date();
date = tmpDate.getDate();
month= tmpDate.getMonth() + 1 ;
if(document.ns)
{
year1=tmpDate.getYear()
year= year1.toString().substr(1,2);
}
else
year= tmpDate.getYear();
document.write(year);
document.write(".");
document.write(month);
document.write(".");
document.write(date);
// -->
</SCRIPT>
</B> </TD></TR>
<TR bgColor=#999999>
<TD colSpan=3 height=1></TD></TR></TBODY></TABLE>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD align=middle bgColor=#fafafa class=td1 vAlign=top width=150><BR>
<SCRIPT src="CSDN_文档中心_改变位图颜色深度.files/microsoft.js"></SCRIPT>
</TD>
<TD align=middle width=620>
<TABLE bgColor=#eeeeee border=0 cellPadding=0 cellSpacing=0 width=600>
<TBODY>
<TR bgColor=#ffffff>
<TD align=middle height=10 width=50></TD>
<TD align=right><A href="http://www.csdn.net/">CSDN</A> - <A
href="http://www.csdn.net/develop/">文档中心</A> - <FONT
color=#003399>Visual C++</FONT> </TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>标题</FONT></TD>
<TD><B> 改变位图颜色深度</B> rjren(转贴)
</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 改变位图颜色深度</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR>
<TR>
<TD align=middle bgColor=#003399 height=10><FONT
color=#ffffff>出处</FONT></TD>
<TD height=10> <A
href="http://codeguru.earthweb.com/bitmap/ChangingColorDepth.html">http://codeguru.earthweb.com/bitmap/ChangingColorDepth.html</A></TD></TR>
<TR>
<TD align=middle height=10></TD>
<TD height=10></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<CENTER>
<H3><FONT color=#a0a099>Changing Bitmaps Color Depth
</FONT></H3></CENTER>
<HR>
<!-- Author and contact details -->This article was contributed by
<A href="mailto:admin@gerdesser.de">Gerd Esser, Germany</A>. <!-- Sample image - gif or jpg --><!-- For which environment is this code specific??? -->
<P><U>Environment:</U> MSVC 6.0
<P><!-- The 'p' starts a paragraph of normal text -->The basic
problem of this code was to decrease a color depth of great bitmaps
(like 8000 x 8000 pixels) to - for example - 4 bits per pixel and
solving nearly (! see below) the original color palette. The first
attempt was to use the method as shown in DDBtoDIB. But such great
bitmaps produce an error: They do nothing sencefull in functions
like GetDIBits. So I handle the bitmap in bands of smaller bitmap
data and make direct file reading/saving operations of the bitmaps.
<P>Because of the internal mapping of the color palette to the
system palette I got some strange results. Also, by realizing the
whole number of really used colors, I ve got another problem with
the previous banding of the bitmap, which show me only a small part
of the overall used colors. This was the second problem. So I create
a color palette by counting and adding the colors of each band to a
global color palette of the bitmap.
<P>A small problem still remains: By mapping the source bitmap into
memory, the color palette cannot be solved exactly. If the color
palette cannot be mapped into the system palette, the result color
palette may differ by a view percent. But I didn't spend more time
to this fact because the present solution was sufficient for me.
<P>The result is a class BitmapLib with two (static) methods,
ChangeColorDepth() and GetUsedColors(). <PRE>BOOL CBitmapLib::ChangeColorDepth(CString const& stSrcBitmapFile,
CString const& stDstBitmapFile,
WORD const wDstBitCount,
CProgressCtrl* pProgressCtrl=NULL);
</PRE>ChangeColorDepth() changes a color depth of a file based
bitmap and saves the result into a destination file. The operation
is done by increasing or decreasing the bits per pixel through the
whole range from 1 to 32 (thus converting also from device dependent
into device independent or the way back). The progress control is
only used if nescessary and showing the work progress (great bitmaps
last a few seconds ...)
<P><PRE>int CBitmapLib::GetUsedColors(CString const & stSrcBitmapFile,
RGBQUAD * pColorTable,
WORD const wMaxColorTableSize,
CProgressCtrl *pProgressCtrl = NULL);
int CBitmapLib::GetUsedColors(BITMAPINFO const * pBmi,
BYTE const * pBits,
UINT const nStartScanLine,
UINT const nScanLines,
RGBQUAD * pColorTable,
WORD const wMaxColorTableSize,
WORD & wUsedColors );
</PRE>A byproduct of the operation ChangeColorDepth() is the method
GetUsedColors(), which count the the really used colors and produces
a color table of the used colors.
<P>Both methods abort its operation, if the destination color depth
is not sufficient enough for the number of used colors in the source
bitmap.
<H3>Downloads</H3><A
href="http://codeguru.earthweb.com/bitmap/ChangingColorDepth_src.zip">Download
source - 6 Kb</A>
<H3>History</H3>Date Posted: February 6, 2001<BR><!-- Only use the following if the article is updated --><!-- Date Last Updated: [today's date in the format month day, year] --><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR>
<TABLE align=center bgColor=#006699 border=0 cellPadding=0 cellSpacing=0
width=770>
<TBODY>
<TR bgColor=#006699>
<TD align=middle bgColor=#006699 id=white><FONT
color=#ffffff>对该文的评论</FONT></TD>
<TD align=middle>
<SCRIPT src="CSDN_文档中心_改变位图颜色深度.files/readnum.htm"></SCRIPT>
</TD></TR></TBODY></TABLE><BR>
<DIV align=center>
<TABLE align=center bgColor=#cccccc border=0 cellPadding=2 cellSpacing=1
width=770>
<TBODY>
<TR>
<TH bgColor=#006699 id=white><FONT
color=#ffffff>我要评论</FONT></TH></TR></TBODY></TABLE></DIV>
<DIV align=center>
<TABLE border=0 width=770>
<TBODY>
<TR>
<TD>你没有登陆,无法发表评论。 请先<A
href="http://www.csdn.net/member/login.asp?from=/Develop/read_article.asp?id=4025">登陆</A>
<A
href="http://www.csdn.net/expert/zc.asp">我要注册</A><BR></TD></TR></TBODY></TABLE></DIV><BR>
<HR noShade SIZE=1 width=770>
<TABLE border=0 cellPadding=0 cellSpacing=0 width=500>
<TBODY>
<TR align=middle>
<TD height=10 vAlign=bottom><A
href="http://www.csdn.net/intro/intro.asp?id=2">网站简介</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=5">广告服务</A> - <A
href="http://www.csdn.net/map/map.shtm">网站地图</A> - <A
href="http://www.csdn.net/help/help.asp">帮助信息</A> - <A
href="http://www.csdn.net/intro/intro.asp?id=2">联系方式</A> - <A
href="http://www.csdn.net/english">English</A> </TD>
<TD align=middle rowSpan=3><A
href="http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001032100010"><IMG
border=0 height=48 src="CSDN_文档中心_改变位图颜色深度.files/biaoshi.gif"
width=40></A></TD></TR>
<TR align=middle>
<TD vAlign=top>百联美达美公司 版权所有 京ICP证020026号</TD></TR>
<TR align=middle>
<TD vAlign=top><FONT face=Verdana>Copyright © CSDN.net, Inc. All rights
reserved</FONT></TD></TR>
<TR>
<TD height=15></TD>
<TD></TD></TR></TBODY></TABLE></DIV>
<DIV></DIV><!--内容结束//--><!--结束//--></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -