日本传真图
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
制作软件显示日本传真图
目前日本传真图在基层气象台站使用较多,为气象保障提供了重要依据,但一般传真图显示软件操作比较烦琐,缺乏简单易操作的放大缩小功能,不符合预报员的习惯。本软件利用Visual C#2008进行开发,实现日本传真图显示,在程序中进行了设计,做到了显示时尽量减少鼠标键盘操作的次数,很方便选择日期和文件,双击图像实现放大缩小,滚动鼠标中轴实现图像的滚动显示。
一、数据文件介绍
利用CCTV接收到的日本传真图资料是日本传真图图像二元数据文件,为二进制文件,以字节为单位,每字节中的每一位表示图像上的一个点的二元值,0或1,图像像素存储顺序除jfuxt852.???外其余都是从上至下,对应每个字节从高位到低位,图像像素点高度为1728个,即每列216个字节,jfuxt852.???是从左到右。
二、编程环境
编程环境为基于Windows的Visual C#2008。
三、功能介绍
运行主要界面如图1所示。
图1 日本传真图运行主界面
1、图像显示。单击左边列表框中带有“√”的传真图数据文件,可以在右边图像框中显示被选择的传真图。
2、图像缩小四倍显示。由于图像较大,像素值为1152×1728,一般的计算机屏幕像素没有设置这么大,程序显示时只能在屏幕上显示一部分,为了整体看传真图,进行缩小四倍显示,像素值为576×864,当鼠标移到图像上双击时,实现图像正常显示和缩小四倍显示之间的自动转换,完成转换后点击另一张传真图,设置不变。
3、鼠标中轴实现图像上下滚动。当鼠标停在图像上,流动中轴,图像随边上滚动条上
下滚动。
4、时间时次选择和判断文件是否存在。开始运行程序时,程序自动选择当前系统时间12小时以前时次的传真图,并判断传真图文件是否存在,存在,则在列表框文件尾加上一个“√”,单击文件名,则传真图可打开,否则加一个“×”,单击文件名不能打开。由选择或输入日期可以选择传真图的日期,可以选择“08”和“20”两个时次。
5、路径设置,图像文件名设置。在安装目录下,设置了一个“JapanFax.ini”文件,存储日本传真图所有文件名,以便传真图文件名发生改变时,只需要在这个设置文件中进行更改,不需要改动程序,便于程序的通用。路径设置后,保存于文件“Path.ini”中。
6、帮助关于。帮助关于文档告诉用户一些基本使用方法。
四、主要功能编程实现方法
这里只给出打开文件、读取数据、显示图像、鼠标中轴图像滚动这个主要功能实现方法。
1、设置文件名,判断是否存在。文件名包括全路径,若不存在,直接返回在。
string filename= m_DataPath + 文件名+'.'+日期 +’0’;//获取路径和文件名,若为08时则最后一个字符为“0”,若为20时最后一个字符为“2”。
if (!File.Exists(filename)return;
2、打开二进制数据文件,并获取文件长度。这样就可以计算出图像每行像素点个数。
FileStream fs = new FileStream(filename, FileMode.Open);
BinaryReader readdata = new BinaryReader(fs);
long myFileLength = fs.Length;
int myline = (int)(myFileLength / 216), pj = 0;
3、放置PictureBox控件到窗体上。为了实现鼠标中轴滚动功能,先放一个Panel控件到窗体上,AutoScroll属性设置为true,在Panel中放置PictureBox控件,SizeMode属性设置为true,这样,当图像大于Panel大小时,有滚动轴,当拖运滚动轴时,图像可以实现滚动功能。
4、窗体初始位置、初始大小设置。程序启动时,由于各运行系统屏幕分辨率大小不一样,使显示的窗体大小不一样,本程序读取屏幕大小,让程序窗体和屏幕一样大。将窗体的StartPosition属性设置为Manual,读取屏幕分辨率大小,设置窗体大小,即在窗体的成员函数Form1_Load中加入如下代码。
MaximumSize = new
Size(Screen.PrimaryScreen.WorkingArea.Width-5,Screen.PrimaryScreen.WorkingArea.Height-5); MinimumSize = new
Size(Screen.PrimaryScreen.WorkingArea.Width-5,Screen.PrimaryScreen.WorkingArea.Height-5); panel1.Size = new
Size(Screen.PrimaryScreen.WorkingArea.Width-175,Screen.PrimaryScreen.WorkingArea.Height-75);
5、读取数据。读取文件数据,将数据转化为像素点,存入图像数据文件im中。
Bitmap im = new Bitmap(myline, 216 * 8);//定义一个图像数据
byte x;
for (i = 0; i < myline; i++)
{
for (j = 0; j < 216; j++)
{
x = readdata.ReadByte();
for (k = 0; k < 8; k++)
{
if (x >= 128)im.SetPixel(pj, 216 * 8 / m_shuoxiao - (j * 8 / m_shuoxiao + k), Color.Black);//判断最高位是否为1,为1则像素点设置为黑色
x <<= 1;
} }
pj++;
}
fs.Close();
pictureBox1.Image = im;
6、图像响应鼠标中轴滚动。鼠标在图形上中轴滚动,可以让图形滚动。
if (!panel1.Capture)
{ panel1.Focus();//使图形获得输入焦点
this.panel1.MouseWheel += new
System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel);
} }
private void panel1_MouseWheel(object sender,MouseEventArgs e)
{ if(e.Delta>0)
w Point(panel1.AutoScrollPosition.X,
-Math.Abs(panel1.AutoScrollPosition.Y)-(int)(e.Delta*1.0));
Application.DoEvents();
}
五、总结
本软件实现日本传真图显示,做到了显示尽量减少鼠标键盘操作的次数,很方便选择日期和文件,双击图像实现放大缩小,滚动鼠标中轴实现图像的滚动显示。这些功能操作简单,更符合预报人员的操作习惯。
说明:需要下载此软件请联系:QQ:53854142