日本传真图

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档