文本转换位图

前言

想不想看看你写的代码长成哪副挫样,

或者看看你写的日记长成哪副挫样.

大家跟随我, 一起来强势围观自己代码长得有多丑.

源码

 1 #include <iostream>
 2 #include <vector>
 3 #include <fstream>
 4 #include <string>
 5 #include <cmath>
 6 #include <Windows.h>
 7
 8 using namespace std;
 9
10 string getFileData(ifstream &ifile);
11 size_t getFileLength(ifstream &ifile);
12 bool saveToFile(const string &fname, const string &data);
13 SIZE getSizeByLength(size_t len);
14
15 int main(int num, char **params)
16 {
17     if (num == 3)
18     {
19         ifstream ifile(params[1]);
20         auto &&data = getFileData(ifile);
21         saveToFile(params[2], data);
22         cout << "转成成功!" << endl;
23     }
24     else
25     {
26         cout << "输入参数: 文本文件 位图文件" << endl;
27     }
28     return 0;
29 }
30
31 string getFileData(ifstream &ifile)
32 {
33     auto length = getFileLength(ifile);
34     auto data = string(length, ‘\0‘);
35     ifile.read(&data[0], length);
36     return data;
37 }
38
39 size_t getFileLength(ifstream &ifile)
40 {
41     ifile.seekg(0, ios::end);
42     size_t len = (size_t)ifile.tellg();
43     ifile.seekg(0, ios::beg);
44     return len;
45 }
46
47 bool saveToFile(const string &fname, const string &data)
48 {
49     auto size = getSizeByLength(data.size() / 3);
50     auto lineWidth = (size.cx * 3 + 3) / 4 * 4;
51
52     BITMAPFILEHEADER bfh;
53     bfh.bfSize = 54 + lineWidth * 5;
54     bfh.bfType = 0x4D42;
55     bfh.bfOffBits = 54;
56     bfh.bfReserved1 = 0;
57     bfh.bfReserved2 = 0;
58
59     BITMAPINFOHEADER bih;
60     bih.biSize = sizeof(BITMAPINFOHEADER);
61     bih.biPlanes = 1;
62     bih.biWidth = size.cx;
63     bih.biHeight = size.cy;
64     bih.biBitCount = 24;
65     bih.biClrUsed = 0;
66     bih.biClrImportant = 0;
67     bih.biXPelsPerMeter = 3780;
68     bih.biYPelsPerMeter = 3780;
69     bih.biCompression = BI_RGB;
70     bih.biSizeImage = lineWidth * bih.biHeight;
71
72     ofstream ofile(fname);
73     ofile.write( (const char *)&bfh, sizeof(BITMAPFILEHEADER) );
74     ofile.write( (const char *)&bih, sizeof(BITMAPINFOHEADER) );
75     ofile.write( (const char *)&data[0], bih.biSizeImage );
76     ofile.close();
77
78     return true;
79 }
80
81 SIZE getSizeByLength(size_t len)
82 {
83     static int widths[] = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048};
84     auto index = 0;
85     while (
86         index < sizeof(widths) / sizeof(int) &&
87         widths[index] * widths[index] < (int)len )
88     {
89         ++index;
90     }
91     int width = widths[index];
92     int height = (int)(len / width + 0.9f);
93
94     SIZE size = { width, height };
95     return size;
96 }

这个思路很简单.

就是读出二进制数据, 每个字节表示RGB其中一个值, 由于是24位位图, 因此3个字节表示一个像素颜色.
然后填充位图, 生成问题.

注意! 由于3个字节表示一个像素, 最小生成位图大小是2X2, 因此长度必须有2 * 3 * 2 * 3.

文本转换位图

时间: 2024-10-08 18:37:39

文本转换位图的相关文章

文本转换成音频流

1.生成声音文件 DotNetSpeech.SpeechVoiceSpeakFlags SSF = DotNetSpeech.SpeechVoiceSpeakFlags.SVSFlagsAsync; DotNetSpeech.SpVoice vo = new SpVoiceClass(); System.Windows.Forms.SaveFileDialog SFD = new System.Windows.Forms.SaveFileDialog(); SFD.Filter = "All f

linux下常用的文本转换命令1(tr)

Linux下常用的文本转换和处理命令 tr命令 tr:替换.压缩或删除字符 格式:tr [OPTION]... SET1 [SET2] 选项: -c complement 使用字符集2替换字符集1中没有包含的字符(默认换行符也算在内) -d delete 删除字符集1中的所有字符,不进行转换 -s squeeze-repeats 把字符集1中的重复的字符压缩成一个 -t --truncate-set1 将字符集1中对应的字符用字符集2替换 (一般默认) 例子: -c 替换:  # echo "a

powershell 将文本转换成表格的另一种方式

$text=" 1 梦幻西游 216406 2014-01-21 资料片 2 炉石传说 15905 2014-01-24 公测 3 新大话西游 214465 2002-08-01 公测 4 问道 11322 2006-04-22 公测 5 沃土 10094 2014-04-23 内测 6 QQ仙灵 10056 2014-06-06 公测 7 神武 10011 2010-09-17 公测 8 大侠Q传 9576 2014-06-27 内测 9 女神三国 9343 2014-06-28 内测 10

将文本转换成语音

又一次在这里和大家在这里和大家见面了.几天给大家看的是如何实现将文本转换成语音.这可是现在很流行的一种快捷表达方式哦!!看<nikita>没?当时我的那个羡慕呀!!不过还好,有我们的讯飞科技为我们写这个强大的程序接口,这样,我们就有机会实现其效果哦! 这里只是谢了一个简单的类似与HelloWorld的那种简单程序.但是这个一通则百通吧. 首先呢?我们必须要在Eclipse环境里面导入一个jar包,那就是这个地址上的jar包.http://download.csdn.net/detail/wan

文本转换成语音

"让别人读书给你听",在某些情况下是一种需求.从程序员的角度来说,就是要把"人"换成"程序",让程序来朗读文字.满足这个需求的关键技术点,是"文本转换成语音",简称TTS. 这次介绍的,并不是TTS实现的原理,而是TTS的应用,也就是基于特定的库或开源项目的使用.对于原理的东西,小程在准备好理论的知识后再尝试讲解清楚. TTS的实现,有不少项目,这里介绍的是eSpeak. 本文介绍如何通过eSpeak来实现文本转换成语音的功能

文本转换成语音的免费工具

文本转换成语音的免费工具?日常生活中,我们在使用微信聊天工具的时候,如果不方便输入文字的情况下,我们会使用语音给对方发送消息.如果对方不方便听取语音消息的时候,可以将语音转换成文字,但是仅限于翻译普通话.那么,文字转换成语音,有没有好用靠谱的软件呢?小编给大家分享一个工具,可以将文字转换成语音.使用工具:迅捷PDF转换器1.首先大家可以在百度浏览器搜索关键词PDF转换器,然后将软件下载安装到电脑中.为下面的操作提前准备.2.软件安装后,鼠标双击进入工具操作页面,这个软件的色彩搭配很好,增强了视觉

python将文本转换成语音的代码

将写代码过程中经常用的一些代码片段备份一下,如下代码段是关于python将文本转换成语音的代码,应该是对小伙伴们有一些好处. # Text To Speech using SAPI (Windows) and Python module pyTTS by Peter Parente# download installer file pyTTS-3.0.win32-py2.4.exe # and pywin32-204.win32-py2.4.exe at this date the latest

CSS 文本格式:对齐方式、文本修饰、文本转换、文本缩进

CSS 文本格式 文本颜色 颜色属性被用来设置文字的颜色. 颜色是通过CSS最经常的指定: 十六进制值 - 如: #FF0000 一个RGB值 - 如: RGB(255,0,0) 颜色的名称 - 如: red 参阅 CSS 颜色值 查看完整的颜色值. 一个网页的背景颜色是指在主体内的选择: 实例 body{color:red;}h1{color:#00ff00;}h2{color:rgb(255,0,0);} 对于W3C标准的CSS:如果你定义了颜色属性,你还必须定义背景色属性. 文本的对齐方式

使用Python3将Markdown(.md)文本转换成 html、pdf

一.Markdown中不同的文本内容会分成不同的文本块,并通过markdown的语法控制进行文本的拼接,组成新的文件. 二.利用Python3实现(.md)文件转换成(.html)文件 在cmd命令行下进入(.py)文件目录下,使用命令进行执行 >python md2html.py <file.md> <file.html> import sys, re #生成器模块 def lines(file): #在文本最后加一空行 for line in file: yield li