079day(字符画原理的认识和二进制文件的读写)

172210704111-陈国佳总结《2017年12月29日》【连续079天】

标题:字符画原理的认识和二进制文件的读写;

内容:

A.今天考了C++,至于如何,就用这张图表示一下:


当然,作为程序员我们可以更委婉更有趣一点:

MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH##%%XXDD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH###%XXDD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMH##%%%XDD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMHH##%%%XXD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWH###%%%XD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWH###%%XDD
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMHH###%XDDD
MMMMMMMMMMMMMMMMMMMMMM%AAD#MMMMMMMMMMMMMMMMMMMMMMMMHH###%%XDD
MMMMMMMMMMMMMMMMMMMX3i{{{+!<+DMMMMMMMMMMMMMMMMMMMMMWH###%XXDD
MMMMMMMMMMMMMMMMMM04DD84pic!7~<HMMMMMMMMMMMMMMMMMMMWH###%XXDD
MMMMMMMMMMMMMMMMWpXDD8A3!:^^.7`^WMMMMMMMMMMMMMMMMMMWHH###%XDD
MMMMMMMMMMMMMMMMwXD8DDAuc^   `{ "MMMMMMMMMMMMMMMMMMMWHH##%XDD
MMMMMMMMMMMMMMMXwADD8w7c!~  .`:{^pMMMMMMMMMMMMMMMMMMMHH##%XDD
MMMMMMMMMMMMMMM?XXDDAw3t` :"{7{77^MMMMMMMMMMMMMMMMMMMMH##%XDD
MMMMMMMMMMMMMM4DXDDD8w3t  tu330?w:%MMMMMMMMMMMMMMMMMMMMH#%XDD
MMMMMMMMMMMMMM4DX#M#MMMHA++330034cDMMMMMMMMMMMMMMMMMMMMWH#XXD
MMMMMMMMMMMMMDAMMHH#MMMMMM%?u33+",wMMMMMMMMMMMMMMMMMMMMMH#%XD
MMMMMMMMMMMMMwWMMHH#MMMMMMMMpu8D+ .8MMMMMMMMMMMMMMMMMMMMWH#%X
MMMMMMMMMMMMM#MMM%MAMMMMMMMM###87^<!MMMMMMMMMMMMMMMMMMMMWHH#X
MMMMMMMMMMMMMMMHMXDu%MMMMMM0{D%8Aw4w8MMMMMMMMMMMMMMMMMMMMWH##
MMMMMMMMMMMMMHMX#H3+,%MMMMM3iA?308X8iDMMMMMMMMMMMMMMMMMMMMWHH
MMMMMMMMMMMMMMW#4%8?<<iAD7tt{{t{c"c7+tMMMMMMMMMMMMMMMMMMMMMMH
MMMMMMMMMMMMMMWWAw8?+t~^^{0000+3300+~uMMMMMMMMMMMMMMMMMMMMMM#
MMMMMMMMMMMMMMMXXt!7+^ !8D4wp0+333p44cc%HWMMMMMMMMMMMMMMMMMMX
MMMMMMMMMMMMMMM#^ ^:,^iAw37ttt,t++uipw7,8HWMMMMMMMMMMMMMMMMH8
MMMMMMMMMMMMMMA. :"!^~+~^`  .` .``~^t7?!^AHHMMMMMMMMMMMMMMHXD
MMMMMMMMHw4Dwwt^!",^,:^``   ^. .. ^ ::::,,XHHHHWMMMMMMMMMM%DD
MMMMMMMMMMMW#A73c ^,^:^.,,, c,:<. ::"{.^,,<H######WMMMMMW%XDD
MMMMMMMMMMMHDDDu`.^^^7!"i70+0~?A~"t7c0:~`~^0###%%%%%%%##%DDD8
MMMMMMMMMMDA8DD~i^^.!3?73?w47+3D?+03!c?!<""~####%%#%%XXXDDDDD
MMMMMMMM#wp4%%uA?!!c?3{7i{uw~+3pitw{,~u{3{+cp####%%%%XXXDDDDD
MMMMMM4u4AD##D4#<333??!{cc7?~!4+!7{,^,c007?3i#####%%XXDXDDDDD
MMMMMMMMMMMMX4HD!w0?i7<t"+7<<{wc+0"^^^:w?3up7X###%%%%XDDDDDDX
MMMMMMMMMMMHHD%pi4?{tic<"?!"!w{t7c^`:..wtp?34u##%%%%%XXXDDDD%
MMMMMMMMMMMDMD4?0wt<!i+<{7{!p7t+t^`.,``0"?{74+%%%%%%XXXXDDDX#
MMMMMMMMMWDM%D0+p3<~!?i+wu+3cc!!. `:```4^ct7pi8%%%%%XXXXDDDXH
MMMMMMMMMMMMDA0!0u<~!000pp!^~<"` .,`` .u`^77?30%%%%X%XXDDDD%H
MMMMMMMMMMMMD4w~?uc"iuw?7i++c.  ``^c++7+<^ii{u7%#%%XXXXDDDD#H
MMMMMMMMMMM%X4p~i3{c0!{`:tt~.      ^<t<.``+{{7t#%#%XXXXDDDD#H
MMMMMMMMMMMX#Ap:t47uu.:AMMM4^      ~XMM#!`+{?+"#X#%XXXXXDDX#H
MMMMMMMMMMMD#80,!43?+cMwticA^     `c0{+7Mi"{uc:X#%%XXXDDDXX#W
MMMMMMMMMMM8#D0,<pw?{M3cHA^:^`     :?M4^+Mt{7<^8#%%%XXXXDX#MH
MMMMMMMMMMMw#D0,"{4iwH^AMMM<`     `.DMMA,%3{i<,p#%%%XXXXX%WHA
MMMMMMMMMMMA#%0,~<?t43.pW#%,``   ```0##D^0p+{",pX#%%%%%%#4D4i
MMMMMMMMMMHD#%p,"!<?,+ "t+{ ``` ````^t+i`t,i{",pD#%%%##Dt+4ic
DMMMMMMMMMX%%%w^~?!+t^^`"+^.```   ``.!+.^^,0t+,3D#%%##3:~wic,
it8MMMMMMM8%X%w^~<77?i^^^^^.````. ``.^^^^^iww":?D%#HHc,.u7c:,
?c,cAMMMMM8D%%p^:!""i?<^^^^.````` ``.^^^^,c!7~:+XDHM?^`c?+~, 
tic,:tMMMMD8%%0^:!<~^^^^^^^.```````...^^^^"<4":i4DW8:74?{",  
pt+t::wMM#Xp%%0^:<<~^^^^^^..``..`^```.^^^^"{X":{pH#{HDu{"^```
8A{ci,"#MD%3%%3^:<":,^......`.+{{7,``....,~4X"~{8WDMDu{"....^
w48?!+:7#D8pXX3,:c~:~^.......^3300!`.....~uDD""iHWMXu+<^^~!{3
0ppAp<+cpDpDXD0,:iwu3c....``.,7ii?!.^...tw8DD<!3MM8?{c:c?003{
u3330p!+uwp%XDp^~ip03u"......."tt!^....<w4A8A!+4X!?i+!?w03i!<
0??uuup+c34%XD4^~ipp3??t^^.....^^....^<3p4A8Ac7A!w?{+0w07t:..
!{7?777?{c0D%D8^~{pw3u7i7t:^......^^!7u3pw88Dc?pDw?u4p?7{,,,7
0{!<t{7{77uX%XD~~+wA3??7{ic"",^^^,"???30848DDc7XX4AA037c"!7D#
HDpi{+t{708#WXDc~+A83u?0pAt~""""""<D8w3p%8DDD!{X#%8pw0wD###HW
MMWX0+!c{pXWWXDi~tDA030HHWi"""""""<WWD0w#DDDX!cXMM#c`~%HMMMMH
MMMMMX88wwHMM%D3~c%4030D#H?<"""""<uHW40w#DDDX<<%MMD`  ,#MMMMH
MMMMMWX#3WMMW%X8:<H4p338DDDD<""""4HHH00w#DDDD<t%MM7    DXMMMH
MMMMMMpD{MMH##XD!"#4p03D%%DDA3??p#MM#ppp#DDDX"u#WM!`.``8M%MMM
MMMMMW4+AMMHH##%?"Aw30004X%XXXXX#MMWXDDDDDXD8<D#WM^`,^^p8w%MM
MMMMM487iAA7iiHuu~<u80~i{+{AXX+i#70++A4c3?i8{+###D w,~H!3XXH#
MMMMM03?AApuw4X7W^Xwc~cX"M"up8tMcw3cM:+M~#!^34#%H8`M^7D{4p#Dw
H0u8%D{MA00w4wH0W"M.. !%H"~uu33wuMc87  #t#~^pw?uH3!3,w430+t::
AX4{<ADM8MW0ww+!W{XA, !MM,`c730<Mi7#c.^8i#~ 0p:,t!?,^u3!{^"!"
30A#80%MXp8Dpp."#~M?i !%+%.^,,^`M,`A?,^H<%".00~^. i,,<,"c+<<"
wDDX%HWMM8HWtM<8u`%8{!<X #+,:,,,M<7!McuM.uD!Mic<^ ^^",:D!iu?{
DDX%#MMMM#MA.!wi``.7A?<?0~i~cc<<u~+7cw3^,^?wt".^^W""W^,c,037+
8AAD%#MMMMMt..````^cXHWM#:,,,~~<u??7!~,,,,?",` .."^,^:```!i7?
ipXD88#MMMH,.....`,^4#%XX+^,,,:{<<i?+!"~,,3D^`^``^,,,.  `.!":
4p3upWMMMMD...`...~^DXXXXA<<+?{+737{ccc7ppDA.,....,:<~,.^^!{+
#W%wMMMMMW8..``...:iXDXXXX%XD{ccc+,+tcct8%X+:.^^,ci{{c!"^^cic
MDwtMMMMMH8^.```.,,AXXXXDXXXi<ccc< ^+ccccXD````:{iiii7!A^`!XX
这样一幅字符画就完成了。

程序可以直接从网上找,但同时了解了一下其原理:

1.灰度图:

我们平时看黑白图片时,其像素的亮度(灰度)可以只用一个值来表示。

2.RGB图:

即彩色图片,R(red)G(gray)B(blue),用这三个值来表示一个像素;

当然,如果我们想将一张彩色图片转换成字符画,可以先把它转换成灰度图,

公式:

f(Gray)=R∗0.299+G∗0.587+B∗0.114;
当我们得到一个灰度图时,我们要知道,字符是非黑即白的,但如果我们从原处看,某一块字符的密集程度就可以反映出一些信息,
因此,我们可以先计算图的某区域的平均灰度(用该区域灰度占图片的总灰度),然后用平均灰度相同的字符代替,
当然,在程序实现时,是将图片的灰度储存到一个二维数组,在进行转换;
字符的平均灰度之类可以直接从网上找,也可用ASCLL码来做,
我找到的程序是以C语言实现的,其代码还看不懂,但有些图片转换并不明显,也许我以后可以写出更好的
程序来实现。

B.二进制文件读写:
我们将可以将数据储存进一个二进制文件,其优点如下:
1).所占空间小,如如果将一个五位数存入到txt文本中,其大小为5字节,而以二进制存入时,就算是十位数也只有4字节;
2).方便读入读出,
Linux,Unix的换行符:'\n'   (ASCLL码:0x0a)
Windows:       '\r\n'       (ASCLL码:0x0d0a)
Mac OS:  '\r'         (ASCLL码:0x0d)

所以Linux,Mac os上的文本文件在windows下打开不换行,
且windows下打开文件,如果不用ios::binary,则
a)读取时,所有'\r\n'会被当作'\n'处理;
b)写入时,单独的'\n'会自动在前加一个'\r';
 
1.二进制读文件:
istream& read (char*s,long n);
将指针指向的地方的n个字节内容读入到内存地址s,同时指针向后移动n字节;
2.二进制写文件:
istream& write(const char*s,long n);

注意:二进制写文件必须以二进制打开读出;
实例:二进制读写:
先输入几个学生信息,以二进制形式保存:
#include<iostream>
#include<fstream>
using namespace std;
struct Student{
	char name[20];
	int score;
};
int main()
{ 
  Student s;
  ofstream OutFile("c:\\tmp\\students.dat",ios::out|ios::binary);
  while(cin>>s.name>>s.score)
       OutFile.write((char*)&s,sizeof(s));
  OutFile.close();
  return 0;
} 
读入:


我用记事本打开如下:
Tom )欯 < Jack )欯 P Jane )欯 (
二进制文件读出显示:
int main()
{ 
  Student s;
  ifstream inFile("c:\\tmp\\students.dat",ios::in|ios::binary);
  if(!inFile){
  	cout<<"error"<<endl;
  	return 0;
  }
  while(inFile.read((char*)&s,sizeof(s))){
  	int readedBytes=inFile.gcount();  //查看刚刚读入字节个数 
  	cout<<s.name<<" "<<s.score<<endl;
  }
  inFile.close(); 
  return 0;
} 

读写:如将Jane改为Mike

int main()
{ 
  Student s;
  fstream iofile("c:\\tmp\\students.dat",ios::in|ios::out|ios::binary);
  if(!iofile){
  	cout<<"error"<<endl;
  	return 0;
  }
  iofile.seekp(2*sizeof(s),ios::beg);
  iofile.write("Mike",strlen("Mike")+1);
  iofile.seekg(0,ios::beg);
  while(iofile.read((char*)&s,sizeof(s))) 
  	cout<<s.name<<" "<<s.score<<endl;
  iofile.close(); 
  return 0;
} 
记得加个头文件<cstring>
运行后,输出结果正确;


明日计划:学习;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值