﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-I smell magic in the air-随笔分类-文件格式</title><link>http://www.cppblog.com/izualzhy/category/20414.html</link><description>坚持 相信自己</description><language>zh-cn</language><lastBuildDate>Sat, 09 Mar 2013 17:48:49 GMT</lastBuildDate><pubDate>Sat, 09 Mar 2013 17:48:49 GMT</pubDate><ttl>60</ttl><item><title>BMP格式学习之转换bmp为字符画</title><link>http://www.cppblog.com/izualzhy/archive/2013/03/09/198322.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sat, 09 Mar 2013 15:38:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2013/03/09/198322.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/198322.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2013/03/09/198322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/198322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/198322.html</trackback:ping><description><![CDATA[看过比赛，又有时间折腾了。今天一直在看bmp格式的文件，很久以来看到别人发的字符画都很有意思。<br />于是试着自己写了个，效果一般但是很有意思。由于我使用的是256色的bmp，可能使用24位或者jpg效果会更好些。<br />先看下转换的结果。<br />转换前：<img src="http://www.cppblog.com/images/cppblog_com/izualzhy/test.PNG" alt="" /><br />转换的字符画：<br /><div></div><div><img src="http://www.cppblog.com/images/cppblog_com/izualzhy/tt.PNG" alt="" /><br />结果比较粗糙，但还可以接受，我想如果是24位bmp会好很多。有时间的话补充一下。<br />这里是代码：<span style="font-size: 13px; color: #008080;">&nbsp;1</span><span style="background-color: #eeeeee; font-size: 13px;">&nbsp;</span><span style="font-size: 13px; color: #008000;">/*</span></div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;=====================================================================================<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filename:&nbsp;&nbsp;ConvertBmpToAscii.cpp<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;Description:&nbsp;&nbsp;convert&nbsp;a&nbsp;256bmp&nbsp;file&nbsp;to&nbsp;ascii-file<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;*<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version:&nbsp;&nbsp;1.0<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Created:&nbsp;&nbsp;03/09/2013&nbsp;05:46:16&nbsp;PM<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; ">&nbsp;*<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author:&nbsp;&nbsp;zhy&nbsp;(),&nbsp;izualzhy@163.com<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; ">&nbsp;*&nbsp;=====================================================================================<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #008080; ">12</span>&nbsp;#include&nbsp;&lt;stdio.h&gt;<br /><span style="color: #008080; ">13</span>&nbsp;#include&nbsp;&lt;stdlib.h&gt;<br /><span style="color: #008080; ">14</span>&nbsp;#include&nbsp;&lt;<span style="color: #0000FF; ">string</span>.h&gt;<br /><span style="color: #008080; ">15</span>&nbsp;#include&nbsp;"Defs.h"<br /><span style="color: #008080; ">16</span>&nbsp;<br /><span style="color: #008080; ">17</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;GetGrayFromRGB(RGBQuad&nbsp;color)<br /><span style="color: #008080; ">18</span>&nbsp;{<br /><span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;color.rgbRed*0.299&nbsp;+&nbsp;color.rgbGreen*0.587&nbsp;+&nbsp;color.rgbBlue*0.114;<br /><span style="color: #008080; ">20</span>&nbsp;}<br /><span style="color: #008080; ">21</span>&nbsp;<br /><span style="color: #008080; ">22</span>&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;GetCharFromGray(<span style="color: #0000FF; ">int</span>&nbsp;gray)<br /><span style="color: #008080; ">23</span>&nbsp;{<br /><span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(gray&nbsp;&gt;&nbsp;0.9&nbsp;&amp;&amp;&nbsp;gray&nbsp;&lt;=1.0)<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">26</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;'#';<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(gray&nbsp;&gt;&nbsp;0.7)&nbsp;{<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;'@';<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(gray&nbsp;&gt;&nbsp;0.4)&nbsp;{<br /><span style="color: #008080; ">30</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;'~';<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(gray&nbsp;&gt;&nbsp;0.2)&nbsp;{<br /><span style="color: #008080; ">32</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;'\'';<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br /><span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;'&nbsp;';<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">36</span>&nbsp;}<br /><span style="color: #008080; ">37</span>&nbsp;<br /><span style="color: #008080; ">38</span>&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>&nbsp;argc,&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;argv[])<br /><span style="color: #008080; ">39</span>&nbsp;{<br /><span style="color: #008080; ">40</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(argc&nbsp;&lt;&nbsp;2)<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">42</span>&nbsp;<br /><span style="color: #008080; ">43</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE*&nbsp;fp&nbsp;=&nbsp;fopen(argv[1],&nbsp;"r");<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!fp)<br /><span style="color: #008080; ">45</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">46</span>&nbsp;<br /><span style="color: #008080; ">47</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitMapFileHeader&nbsp;bmfHeader;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(&amp;bmfHeader,&nbsp;<span style="color: #0000FF; ">sizeof</span>(bmfHeader),&nbsp;1,&nbsp;fp);<br /><span style="color: #008080; ">49</span>&nbsp;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitMapInfoHeader&nbsp;bmiHeader;<br /><span style="color: #008080; ">51</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(&amp;bmiHeader,&nbsp;<span style="color: #0000FF; ">sizeof</span>(bmiHeader),&nbsp;1,&nbsp;fp);<br /><span style="color: #008080; ">52</span>&nbsp;<br /><span style="color: #008080; ">53</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RGBQuad&nbsp;colorTable[256];<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(colorTable,&nbsp;<span style="color: #0000FF; ">sizeof</span>(RGBQuad),&nbsp;256,&nbsp;fp);<br /><span style="color: #008080; ">55</span>&nbsp;<br /><span style="color: #008080; ">56</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;width&nbsp;=&nbsp;bmiHeader.biWidth;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;=&nbsp;(width*bmiHeader.biBitCount&nbsp;+&nbsp;31)/8;<br /><span style="color: #008080; ">58</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width&nbsp;=&nbsp;width/4*4;<br /><span style="color: #008080; ">59</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;height&nbsp;=&nbsp;bmiHeader.biHeight;<br /><span style="color: #008080; ">60</span>&nbsp;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;dataImage&nbsp;=&nbsp;(unsigned&nbsp;<span style="color: #0000FF; ">char</span>*)malloc(width*height*<span style="color: #0000FF; ">sizeof</span>(unsigned&nbsp;<span style="color: #0000FF; ">char</span>));<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dataImage,&nbsp;0,&nbsp;width*height);<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(dataImage,&nbsp;1,&nbsp;width*height,&nbsp;fp);<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>*&nbsp;dataAscii&nbsp;=&nbsp;(<span style="color: #0000FF; ">char</span>*)malloc(width*height*<span style="color: #0000FF; ">sizeof</span>(<span style="color: #0000FF; ">char</span>));<br /><span style="color: #008080; ">65</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(dataAscii,&nbsp;'&nbsp;',&nbsp;width*height);<br /><span style="color: #008080; ">66</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i=0;&nbsp;i&lt;width;&nbsp;++i)<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j=height-1;&nbsp;j&gt;=0;&nbsp;--j)<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;gray&nbsp;=&nbsp;GetGrayFromRGB(colorTable[dataImage[j*width&nbsp;+&nbsp;i]]);<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataAscii[(height&nbsp;-&nbsp;1&nbsp;-&nbsp;j)*width&nbsp;+&nbsp;i]&nbsp;=&nbsp;GetCharFromGray(gray);<br /><span style="color: #008080; ">71</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">72</span>&nbsp;<br /><span style="color: #008080; ">73</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><span style="color: #008080; ">74</span>&nbsp;<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;=&nbsp;fopen("demo.txt",&nbsp;"w");<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!fp)<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br /><span style="color: #008080; ">78</span>&nbsp;<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;j=0;&nbsp;j&lt;height;&nbsp;j+=10)<br /><span style="color: #008080; ">80</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i=0;&nbsp;i&lt;width;&nbsp;i+=10)<br /><span style="color: #008080; ">82</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite(dataAscii&nbsp;+&nbsp;j*width&nbsp;+&nbsp;i,&nbsp;1,&nbsp;1,&nbsp;fp);<br /><span style="color: #008080; ">84</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">85</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite("\n",&nbsp;1,&nbsp;<span style="color: #0000FF; ">sizeof</span>("\n"),&nbsp;fp);<br /><span style="color: #008080; ">86</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">87</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br /><span style="color: #008080; ">88</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(dataImage);<br /><span style="color: #008080; ">89</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;free(dataAscii);<br /><span style="color: #008080; ">90</span>&nbsp;<br /><span style="color: #008080; ">91</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br /><span style="color: #008080; ">92</span>&nbsp;}<br /><span style="color: #008080; ">93</span>&nbsp;</div><img src ="http://www.cppblog.com/izualzhy/aggbug/198322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2013-03-09 23:38 <a href="http://www.cppblog.com/izualzhy/archive/2013/03/09/198322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BMP格式学习之创建bmp文件</title><link>http://www.cppblog.com/izualzhy/archive/2013/03/09/198317.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sat, 09 Mar 2013 09:22:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2013/03/09/198317.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/198317.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2013/03/09/198317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/198317.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/198317.html</trackback:ping><description><![CDATA[<p>接上篇，既然颜色表可以得到，bmp的文件格式已经很清楚了，能否自己创建bmp文件呢？</p> <p>还是以256色bmp为例.</p> <p>答案是可以的，这是程序生成的一个简单的bmp：</p> <p><a href="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/471d2368d4d4_EDD1/demo.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="demo" border="0" alt="demo" src="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/471d2368d4d4_EDD1/demo_thumb.png" width="164" height="244" /></a></p> <p>根据之前的颜色表，可以得到red,green,blue像素对应的index,只要在位图数据区写上该内容就好了。</p> <p>注意位图数据的方向是从左到右从下至上。</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:6ffa2b3c-65e8-43b4-a04e-12d2941bde45" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#937a42">/*</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> * =====================================================================================</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filename:&nbsp;&nbsp;CreateBMPFile.cpp</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;Description:&nbsp;&nbsp;demos of creating 256BMP file</span></li> <li><span style="color:#937a42"> *</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version:&nbsp;&nbsp;1.0</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Created:&nbsp;&nbsp;03/09/2013 03:44:13 PM</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author:&nbsp;&nbsp;zhy (), izualzhy@163.com</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> * =====================================================================================</span></li> <li><span style="color:#937a42"> */</span></li> <li style="background: #f3f3f3"><span style="color:#400080">#include</span> <span style="color:#259241">&lt;stdio.h&gt;</span></li> <li><span style="color:#400080">#include</span> <span style="color:#259241">&lt;stdlib.h&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#400080">#include</span> <span style="color:#259241">&lt;string.h&gt;</span></li> <li><span style="color:#400080">#include</span> <span style="color:#259241">"Defs.h"</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#400080">int</span> main<span style="color:#2e53d1">()</span></li> <li style="background: #f3f3f3">{</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> width <span style="color:#2e53d1">=</span> <span style="color:#259241">200</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> height <span style="color:#2e53d1">=</span> <span style="color:#259241">300</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> bitCount <span style="color:#2e53d1">=</span> <span style="color:#259241">8</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> realWidth <span style="color:#2e53d1">=</span> <span style="color:#2e53d1">(</span>width <span style="color:#2e53d1">*</span> bitCount <span style="color:#2e53d1">+</span> <span style="color:#259241">31</span><span style="color:#2e53d1">)/</span><span style="color:#259241">8</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;realWidth <span style="color:#2e53d1">=</span> realWidth<span style="color:#2e53d1">/</span><span style="color:#259241">4</span><span style="color:#2e53d1">*</span><span style="color:#259241">4</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> dataSize <span style="color:#2e53d1">=</span> realWidth <span style="color:#2e53d1">*</span> height<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;BitMapFileHeader bmfHeader<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;memset<span style="color:#2e53d1">(&amp;</span>bmfHeader<span style="color:#2e53d1">,</span> <span style="color:#259241">0</span><span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmfHeader<span style="color:#2e53d1">));</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;bmfHeader<span style="color:#2e53d1">.</span>bfType <span style="color:#2e53d1">=</span> <span style="color:#259241">0x4d42</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;bmfHeader<span style="color:#2e53d1">.</span>bfOffBits <span style="color:#2e53d1">=</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>BitMapFileHeader<span style="color:#2e53d1">)</span> <span style="color:#2e53d1">+</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>BitMapInfoHeader<span style="color:#2e53d1">)</span> <span style="color:#2e53d1">+</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">)*</span><span style="color:#259241">256</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;bmfHeader<span style="color:#2e53d1">.</span>bfSize <span style="color:#2e53d1">=</span> bmfHeader<span style="color:#2e53d1">.</span>bfOffBits <span style="color:#2e53d1">+</span> dataSize<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;BitMapInfoHeader bmiHeader<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;memset<span style="color:#2e53d1">(&amp;</span>bmiHeader<span style="color:#2e53d1">,</span> <span style="color:#259241">0</span><span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmiHeader<span style="color:#2e53d1">));</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biSize <span style="color:#2e53d1">=</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>BitMapInfoHeader<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biWidth <span style="color:#2e53d1">=</span> width<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biHeight <span style="color:#2e53d1">=</span> height<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biPlanes <span style="color:#2e53d1">=</span> <span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biBitCount <span style="color:#2e53d1">=</span> bitCount<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;bmiHeader<span style="color:#2e53d1">.</span>biSizeImage <span style="color:#2e53d1">=</span> dataSize<span style="color:#2e53d1">;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;FILE<span style="color:#2e53d1">*</span> fpIn <span style="color:#2e53d1">=</span> fopen<span style="color:#2e53d1">(</span><span style="color:#259241">"3.bmp"</span><span style="color:#2e53d1">,</span> <span style="color:#259241">"r"</span><span style="color:#2e53d1">);</span><span style="color:#937a42">//3.bmp是之前测试用的文件，256色bmp</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(!</span>fpIn<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;RGBQuad colorTables<span style="color:#2e53d1">[</span><span style="color:#259241">256</span><span style="color:#2e53d1">];</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fseek<span style="color:#2e53d1">(</span>fpIn<span style="color:#2e53d1">,</span> <span style="color:#259241">0x36</span><span style="color:#2e53d1">,</span> SEEK_SET<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;fread<span style="color:#2e53d1">(</span>colorTables<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">),</span> <span style="color:#259241">256</span><span style="color:#2e53d1">,</span> fpIn<span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fclose<span style="color:#2e53d1">(</span>fpIn<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">unsigned</span> <span style="color:#400080">char</span><span style="color:#2e53d1">*</span> imageData <span style="color:#2e53d1">=</span> <span style="color:#2e53d1">(</span><span style="color:#400080">unsigned</span> <span style="color:#400080">char</span><span style="color:#2e53d1">*)</span>malloc<span style="color:#2e53d1">(</span>dataSize<span style="color:#2e53d1">*</span><span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span><span style="color:#400080">unsigned</span> <span style="color:#400080">char</span><span style="color:#2e53d1">));</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(!</span>imageData<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;memset<span style="color:#2e53d1">(</span>imageData<span style="color:#2e53d1">,</span> <span style="color:#259241">0</span><span style="color:#2e53d1">,</span> dataSize<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> i<span style="color:#2e53d1">=</span><span style="color:#259241">0</span><span style="color:#2e53d1">;</span> i<span style="color:#2e53d1">&lt;</span>realWidth<span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>i<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> j<span style="color:#2e53d1">=</span><span style="color:#259241">0</span><span style="color:#2e53d1">;</span> j<span style="color:#2e53d1">&lt;=</span><span style="color:#259241">20</span><span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>j<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageData<span style="color:#2e53d1">[</span>j<span style="color:#2e53d1">*</span>realWidth <span style="color:#2e53d1">+</span> i<span style="color:#2e53d1">]</span> <span style="color:#2e53d1">=</span> <span style="color:#259241">0xff</span><span style="color:#2e53d1">;</span><span style="color:#937a42">//white</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> j<span style="color:#2e53d1">=</span><span style="color:#259241">50</span><span style="color:#2e53d1">;</span> j<span style="color:#2e53d1">&lt;=</span><span style="color:#259241">100</span><span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>j<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageData<span style="color:#2e53d1">[</span>j<span style="color:#2e53d1">*</span>realWidth <span style="color:#2e53d1">+</span> i<span style="color:#2e53d1">]</span> <span style="color:#2e53d1">=</span> <span style="color:#259241">0xfc</span><span style="color:#2e53d1">;</span><span style="color:#937a42">//blue</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> j<span style="color:#2e53d1">=</span><span style="color:#259241">150</span><span style="color:#2e53d1">;</span> j<span style="color:#2e53d1">&lt;=</span><span style="color:#259241">180</span><span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>j<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageData<span style="color:#2e53d1">[</span>j<span style="color:#2e53d1">*</span>realWidth <span style="color:#2e53d1">+</span> i<span style="color:#2e53d1">]</span> <span style="color:#2e53d1">=</span> <span style="color:#259241">0xfa</span><span style="color:#2e53d1">;</span><span style="color:#937a42">//green</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> j<span style="color:#2e53d1">=</span><span style="color:#259241">220</span><span style="color:#2e53d1">;</span> j<span style="color:#2e53d1">&lt;</span><span style="color:#259241">300</span><span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>j<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageData<span style="color:#2e53d1">[</span>j<span style="color:#2e53d1">*</span>realWidth <span style="color:#2e53d1">+</span> i<span style="color:#2e53d1">]</span> <span style="color:#2e53d1">=</span> <span style="color:#259241">0xf9</span><span style="color:#2e53d1">;</span><span style="color:#937a42">//red</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;FILE<span style="color:#2e53d1">*</span> fpOut <span style="color:#2e53d1">=</span> fopen<span style="color:#2e53d1">(</span><span style="color:#259241">"demo.bmp"</span><span style="color:#2e53d1">,</span> <span style="color:#259241">"w"</span><span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(!</span>fpOut<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fwrite<span style="color:#2e53d1">(&amp;</span>bmfHeader<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmfHeader<span style="color:#2e53d1">),</span> <span style="color:#259241">1</span><span style="color:#2e53d1">,</span> fpOut<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;fwrite<span style="color:#2e53d1">(&amp;</span>bmiHeader<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmiHeader<span style="color:#2e53d1">),</span> <span style="color:#259241">1</span><span style="color:#2e53d1">,</span> fpOut<span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fwrite<span style="color:#2e53d1">(</span>colorTables<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">),</span> <span style="color:#259241">256</span><span style="color:#2e53d1">,</span> fpOut<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;fwrite<span style="color:#2e53d1">(</span>imageData<span style="color:#2e53d1">,</span> <span style="color:#259241">1</span><span style="color:#2e53d1">,</span> dataSize<span style="color:#2e53d1">,</span> fpOut<span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fclose<span style="color:#2e53d1">(</span>fpOut<span style="color:#2e53d1">);<br />free(imageData);</span></li> <li style="background: #f3f3f3">}</li> </ol> </div> </div> </div> <p>该代码会生成上述bmp文件。</p> <p>如果你看了前面的文章，就别问我3.bmp哪里的^_^</p> <p>因为数据方向从上到下，因此从下到上依次为white, blue, green, red。</p> <p>既然数据可以这么写入，接下来的就可以自己玩啦。</p> <p>比如写入的代码改成了这个样子：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ba8bfd0c-43dc-4252-8774-02d6c24d3177" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#400080">int</span> i <span style="color:#2e53d1">=</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;<span style="color:#400080">while</span> <span style="color:#2e53d1">(</span>i<span style="color:#2e53d1">++</span> <span style="color:#2e53d1">&lt;</span> <span style="color:#259241">100</span><span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> randX <span style="color:#2e53d1">=</span> rand<span style="color:#2e53d1">()%</span>realWidth<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> randY <span style="color:#2e53d1">=</span> rand<span style="color:#2e53d1">()%</span>height<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> randColorIndex <span style="color:#2e53d1">=</span> rand<span style="color:#2e53d1">()%</span><span style="color:#259241">256</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> range <span style="color:#2e53d1">=</span> <span style="color:#259241">15</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> minX <span style="color:#2e53d1">=</span> randX <span style="color:#2e53d1">-</span> range<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minX <span style="color:#2e53d1">=</span> minX <span style="color:#2e53d1">&gt;</span> <span style="color:#259241">0</span> <span style="color:#2e53d1">?</span> minX <span style="color:#2e53d1">:</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> minY <span style="color:#2e53d1">=</span> randY <span style="color:#2e53d1">-</span> range<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minY <span style="color:#2e53d1">=</span> minY <span style="color:#2e53d1">&gt;</span> <span style="color:#259241">0</span> <span style="color:#2e53d1">?</span> minY <span style="color:#2e53d1">:</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> maxX <span style="color:#2e53d1">=</span> randX <span style="color:#2e53d1">+</span> range<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxX <span style="color:#2e53d1">=</span> maxX <span style="color:#2e53d1">&gt;</span> realWidth <span style="color:#2e53d1">?</span> realWidth <span style="color:#2e53d1">:</span> maxX<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">int</span> maxY <span style="color:#2e53d1">=</span> randY <span style="color:#2e53d1">+</span> range<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxY <span style="color:#2e53d1">=</span> maxY <span style="color:#2e53d1">&gt;</span> height <span style="color:#2e53d1">?</span> height <span style="color:#2e53d1">:</span> maxY<span style="color:#2e53d1">;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf<span style="color:#2e53d1">(</span><span style="color:#259241">"%d,%d,%d,%d\n"</span><span style="color:#2e53d1">,</span>minX<span style="color:#2e53d1">,</span> maxX<span style="color:#2e53d1">,</span> minY<span style="color:#2e53d1">,</span> maxY<span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> i<span style="color:#2e53d1">=</span>minX<span style="color:#2e53d1">;</span> i<span style="color:#2e53d1">&lt;</span>maxX<span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>i<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> j<span style="color:#2e53d1">=</span>minY<span style="color:#2e53d1">;</span> j<span style="color:#2e53d1">&lt;</span>maxY<span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>j<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imageData<span style="color:#2e53d1">[</span>j<span style="color:#2e53d1">*</span>realWidth <span style="color:#2e53d1">+</span> i<span style="color:#2e53d1">]</span> <span style="color:#2e53d1">=</span> randColorIndex<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li style="background: #f3f3f3">&nbsp;&nbsp;}</li> </ol> </div> </div> </div> <p>随机取点，以该点为中心的矩形随机填充颜色。就成了这个样子：</p> <p><a href="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/471d2368d4d4_EDD1/demo_1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="demo" border="0" alt="demo" src="http://www.cppblog.com/images/cppblog_com/izualzhy/Windows-Live-Writer/471d2368d4d4_EDD1/demo_thumb_1.png" width="164" height="244" /></a></p> <p>是不是很好玩？绘制直线，圆形应该就很容易了。</p><img src ="http://www.cppblog.com/izualzhy/aggbug/198317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2013-03-09 17:22 <a href="http://www.cppblog.com/izualzhy/archive/2013/03/09/198317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BMP格式学习之提取颜色表</title><link>http://www.cppblog.com/izualzhy/archive/2013/03/09/198315.html</link><dc:creator>izualzhy</dc:creator><author>izualzhy</author><pubDate>Sat, 09 Mar 2013 07:52:00 GMT</pubDate><guid>http://www.cppblog.com/izualzhy/archive/2013/03/09/198315.html</guid><wfw:comment>http://www.cppblog.com/izualzhy/comments/198315.html</wfw:comment><comments>http://www.cppblog.com/izualzhy/archive/2013/03/09/198315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/izualzhy/comments/commentRss/198315.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/izualzhy/services/trackbacks/198315.html</trackback:ping><description><![CDATA[<p>按照从网上查找的资料bmp格式的颜色表是不固定的，的确如此，我测试了几个bmp，颜色表各不相同。</p> <p>不过由windows画图程序生成的256色的bmp试验时，发现颜色表一直相同，用来作为自己生成bmp文件的颜色表模版不错。</p> <p>代码：</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23fa356a-dfc2-4af6-8d60-4822d1522993" class="wlWriterEditableSmartContent"> <div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt"> <div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px">Code Snippet</div> <div style="background: #ddd; max-height: 300px; overflow: auto"> <ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;"> <li><span style="color:#937a42">/*</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> * =====================================================================================</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filename:&nbsp;&nbsp;PrintColorTable.cpp</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;Description:&nbsp;&nbsp;Print ColorTable Of Bmp Files</span></li> <li><span style="color:#937a42"> *</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Version:&nbsp;&nbsp;1.0</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Created:&nbsp;&nbsp;03/09/2013 02:56:28 PM</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> *</span></li> <li><span style="color:#937a42"> *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Author:&nbsp;&nbsp;zhy (), izualzhy@163.com</span></li> <li style="background: #f3f3f3"><span style="color:#937a42"> * =====================================================================================</span></li> <li><span style="color:#937a42"> */</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#400080">#include</span> <span style="color:#259241">&lt;stdio.h&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#400080">#include</span> <span style="color:#259241">&lt;stdlib.h&gt;</span></li> <li><span style="color:#400080">#include</span> <span style="color:#259241">&lt;math.h&gt;</span></li> <li style="background: #f3f3f3"><span style="color:#400080">#include</span> <span style="color:#259241">"Defs.h"</span></li> <li><span style="color:#400080">using</span> <span style="color:#400080">namespace</span> std<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li><span style="color:#400080">int</span> main<span style="color:#2e53d1">(</span><span style="color:#400080">int</span> argc<span style="color:#2e53d1">,</span> <span style="color:#400080">char</span><span style="color:#2e53d1">*</span> argv<span style="color:#2e53d1">[])</span></li> <li style="background: #f3f3f3">{</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(</span>argc <span style="color:#2e53d1">&lt;</span> <span style="color:#259241">2</span><span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;FILE<span style="color:#2e53d1">*</span> fp <span style="color:#2e53d1">=</span> fopen<span style="color:#2e53d1">(</span>argv<span style="color:#2e53d1">[</span><span style="color:#259241">1</span><span style="color:#2e53d1">],</span> <span style="color:#259241">"r"</span><span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(!</span>fp<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;BitMapFileHeader bmfHeader<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;fread<span style="color:#2e53d1">(&amp;</span>bmfHeader<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmfHeader<span style="color:#2e53d1">),</span> <span style="color:#259241">1</span><span style="color:#2e53d1">,</span> fp<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;BitMapInfoHeader bmiHeader<span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;fread<span style="color:#2e53d1">(&amp;</span>bmiHeader<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>bmiHeader<span style="color:#2e53d1">),</span> <span style="color:#259241">1</span><span style="color:#2e53d1">,</span> fp<span style="color:#2e53d1">);</span></li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;RGBQuad<span style="color:#2e53d1">*</span> colorTable <span style="color:#2e53d1">=</span> NULL<span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">const</span> <span style="color:#400080">int</span> tableCount <span style="color:#2e53d1">=</span> pow<span style="color:#2e53d1">(</span><span style="color:#259241">2</span><span style="color:#2e53d1">,</span> bmiHeader<span style="color:#2e53d1">.</span>biBitCount<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">switch</span> <span style="color:#2e53d1">(</span>bmiHeader<span style="color:#2e53d1">.</span>biBitCount<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">case</span> <span style="color:#259241">1</span><span style="color:#2e53d1">:</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">case</span> <span style="color:#259241">4</span><span style="color:#2e53d1">:</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">case</span> <span style="color:#259241">8</span><span style="color:#2e53d1">:</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;colorTable <span style="color:#2e53d1">=</span> <span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">*)</span>malloc<span style="color:#2e53d1">(</span>tableCount<span style="color:#2e53d1">*</span><span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">));</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">break</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">case</span> <span style="color:#259241">24</span><span style="color:#2e53d1">:</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#937a42">//no colorTable;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf<span style="color:#2e53d1">(</span><span style="color:#259241">"No ColorTable For 24bits-bmp\n"</span><span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">default</span><span style="color:#2e53d1">:</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf<span style="color:#2e53d1">(</span><span style="color:#259241">"unrecoginzed bitsCount\n"</span><span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">if</span> <span style="color:#2e53d1">(!</span>colorTable<span style="color:#2e53d1">)</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf<span style="color:#2e53d1">(</span><span style="color:#259241">"malloc error!\n"</span><span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#2e53d1">-</span><span style="color:#259241">1</span><span style="color:#2e53d1">;</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li>&nbsp;</li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;fread<span style="color:#2e53d1">(</span>colorTable<span style="color:#2e53d1">,</span> <span style="color:#400080">sizeof</span><span style="color:#2e53d1">(</span>RGBQuad<span style="color:#2e53d1">),</span> tableCount<span style="color:#2e53d1">,</span> fp<span style="color:#2e53d1">);</span></li> <li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">for</span> <span style="color:#2e53d1">(</span><span style="color:#400080">int</span> i<span style="color:#2e53d1">=</span><span style="color:#259241">0</span><span style="color:#2e53d1">;</span> i<span style="color:#2e53d1">&lt;</span>tableCount<span style="color:#2e53d1">;</span> <span style="color:#2e53d1">++</span>i<span style="color:#2e53d1">)</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;{</li> <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf<span style="color:#2e53d1">(</span><span style="color:#259241">"%02x %02x %02x %02x\n"</span><span style="color:#2e53d1">,</span> colorTable<span style="color:#2e53d1">[</span>i<span style="color:#2e53d1">].</span>rgbBlue<span style="color:#2e53d1">,</span> colorTable<span style="color:#2e53d1">[</span>i<span style="color:#2e53d1">].</span>rgbGreen<span style="color:#2e53d1">,</span> colorTable<span style="color:#2e53d1">[</span>i<span style="color:#2e53d1">].</span>rgbRed<span style="color:#2e53d1">,</span> colorTable<span style="color:#2e53d1">[</span>i<span style="color:#2e53d1">].</span>rgbReserved<span style="color:#2e53d1">);</span></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;}</li> <li>&nbsp;free(colorTable);<br /></li> <li style="background: #f3f3f3">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#400080">return</span> <span style="color:#259241">0</span><span style="color:#2e53d1">;</span></li> <li>}</li> </ol> </div> </div> </div> <p>&nbsp;</p> <p>可以用来打印单色位图，16色位图，256色位图的颜色表，进一步比较相同位不同bmp的颜色表的区别。</p><img src ="http://www.cppblog.com/izualzhy/aggbug/198315.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/izualzhy/" target="_blank">izualzhy</a> 2013-03-09 15:52 <a href="http://www.cppblog.com/izualzhy/archive/2013/03/09/198315.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>