论文部分内容阅读
一、需求分析
笔者从事国画教学工作,但也是一个编程发烧友,在长期从事画画的创作中,利用信息化手段,将创造作品保存到计算机里,通过网络可以和同行进行交流,也可以将自己的作品公布到网站上,为教学研究开创了一条创新之路。但在通过网络交流的时候遇到了一个很大的问题,用数码相机或者扫描仪,获取的图片字节数太大,少则几兆,多则几十兆,给网络传输和网站公布都带来了不少的麻烦,通过PS能够将这些大字节数的图片文件处理为大小适中的图片(以便使备份与同行相互远程传输也显得比较容易)。但不能够自动批量处理,而其有版权的问题,经过半年的努力,笔者用C 开发了自动批量处理的图片处理软件。
软件开发考虑到可应用到其他领域,因此需考虑通用的因素,软件进入界面如图1所示。
二、软件功能
1.视频浏览:如果当前文件夹下有视频文件,可以进行浏览,只能播放mpeg格式,如果图片文件列表第一个文件是视频格式文件,就自动播放,如果要处理图片文件,单击“结束视频”。
2.转换图片:单击文件列表框文件,单击“转换设置”显示当前选准图片的像素高度和宽度,保持图片纵横比保持图片不变形,输入要转换的像素数据,按照原图片的纵横比计算相对应的像素,并加以显示。选择“转换当前图片”,是指转换当前选准的图片,选择“连续转换”是指自动连续转换左边文件列表框内的所有图片文件,按照统一像素尺寸、同一格式进行转换,这种情况适用于图片大小格式一样的一组照片;“转换文件另存”是指转换成的目标文件另存为,原文件名_1.jpg,
“覆盖原文件”是指转换动作完成生成的文件名就是选准的文件名,将原文件名覆盖,这种覆盖无法恢复。
3.可用于教师编写专业教材时,对教材插图的处理,利用单个图片文件的处理。
三、代码实现
单击“执行”(Button7)事件函数
void__fastcall TForm1::Button7Click(TObject *Sender)
{
Form1->Button8->Enabled=false;
Form1->Panel6->Visible=false;
if(Form1->RadioButton1->Checked==true)//转换当前图片
{
ppc=ppc.LowerCase();
int k=ppc.Pos(".jpg");
int k1=ppc.Pos(".jpeg");
int j=ppc.Pos(".bmp");
if(j>0 || k>0 || k1>0)
{
WRJPG(ppc);//-----转换函数
Application->MessageBox("图片大小转换成功","信息",48);
Form1->FileListBox1->Update();
}
else
{
String kdv="";
kdv=kdv ppc "不是图片文件,所以无法转换";
Application->MessageBox(kdv.c_str(),"信息",48);
}
}
if(Form1->RadioButton2->Checked==true)//连续转换
{
int mk=Form1->FileListBox1->Items->Count;//获取图片文件列表总数
int ndkf=0;
Form1->ProgressBar1->Min=0;
Form1->ProgressBar1->Max=mk;
Form1->ProgressBar1->Visible=true;
for(int i=0;i<mk;i )//---执行连续转换循环
{
Form1->ProgressBar1->Position=i;
Application->ProcessMessages();
ppc=Form1->FileListBox1->Items->Strings[i];
ppc=ppc.LowerCase();
int k=ppc.Pos(".jpg");
int k1=ppc.Pos(".jpeg");
int j=ppc.Pos(".bmp");
if(j>0 || k>0 || k1>0)
{
try {
Form1->Image1->Picture->LoadFromFile(ppc);
ndkf=ndkf 1;
WRJPG(ppc);//--核心转换函数
}
catch(...){}
}
}
Form1->ProgressBar1->Position=mk;
Form1->ProgressBar1->Visible=false;
Form1->FileListBox1->Update();
String dkc="";
dkc=dkc "共有" IntToStr(ndkf).c_str() "个图片文件进行成功转换"; ;
Application->MessageBox(dkc.c_str(),"信息",48);
}
Form1->Button8->Enabled=true;
}
核心转换函数WRJPG();
void __fastcall TForm1::WRJPG(AnsiString filename)
{
if(p<=0 || q<=0) return ;//转换像素的宽度和高度
if(p>0
笔者从事国画教学工作,但也是一个编程发烧友,在长期从事画画的创作中,利用信息化手段,将创造作品保存到计算机里,通过网络可以和同行进行交流,也可以将自己的作品公布到网站上,为教学研究开创了一条创新之路。但在通过网络交流的时候遇到了一个很大的问题,用数码相机或者扫描仪,获取的图片字节数太大,少则几兆,多则几十兆,给网络传输和网站公布都带来了不少的麻烦,通过PS能够将这些大字节数的图片文件处理为大小适中的图片(以便使备份与同行相互远程传输也显得比较容易)。但不能够自动批量处理,而其有版权的问题,经过半年的努力,笔者用C 开发了自动批量处理的图片处理软件。
软件开发考虑到可应用到其他领域,因此需考虑通用的因素,软件进入界面如图1所示。
二、软件功能
1.视频浏览:如果当前文件夹下有视频文件,可以进行浏览,只能播放mpeg格式,如果图片文件列表第一个文件是视频格式文件,就自动播放,如果要处理图片文件,单击“结束视频”。
2.转换图片:单击文件列表框文件,单击“转换设置”显示当前选准图片的像素高度和宽度,保持图片纵横比保持图片不变形,输入要转换的像素数据,按照原图片的纵横比计算相对应的像素,并加以显示。选择“转换当前图片”,是指转换当前选准的图片,选择“连续转换”是指自动连续转换左边文件列表框内的所有图片文件,按照统一像素尺寸、同一格式进行转换,这种情况适用于图片大小格式一样的一组照片;“转换文件另存”是指转换成的目标文件另存为,原文件名_1.jpg,
“覆盖原文件”是指转换动作完成生成的文件名就是选准的文件名,将原文件名覆盖,这种覆盖无法恢复。
3.可用于教师编写专业教材时,对教材插图的处理,利用单个图片文件的处理。
三、代码实现
单击“执行”(Button7)事件函数
void__fastcall TForm1::Button7Click(TObject *Sender)
{
Form1->Button8->Enabled=false;
Form1->Panel6->Visible=false;
if(Form1->RadioButton1->Checked==true)//转换当前图片
{
ppc=ppc.LowerCase();
int k=ppc.Pos(".jpg");
int k1=ppc.Pos(".jpeg");
int j=ppc.Pos(".bmp");
if(j>0 || k>0 || k1>0)
{
WRJPG(ppc);//-----转换函数
Application->MessageBox("图片大小转换成功","信息",48);
Form1->FileListBox1->Update();
}
else
{
String kdv="";
kdv=kdv ppc "不是图片文件,所以无法转换";
Application->MessageBox(kdv.c_str(),"信息",48);
}
}
if(Form1->RadioButton2->Checked==true)//连续转换
{
int mk=Form1->FileListBox1->Items->Count;//获取图片文件列表总数
int ndkf=0;
Form1->ProgressBar1->Min=0;
Form1->ProgressBar1->Max=mk;
Form1->ProgressBar1->Visible=true;
for(int i=0;i<mk;i )//---执行连续转换循环
{
Form1->ProgressBar1->Position=i;
Application->ProcessMessages();
ppc=Form1->FileListBox1->Items->Strings[i];
ppc=ppc.LowerCase();
int k=ppc.Pos(".jpg");
int k1=ppc.Pos(".jpeg");
int j=ppc.Pos(".bmp");
if(j>0 || k>0 || k1>0)
{
try {
Form1->Image1->Picture->LoadFromFile(ppc);
ndkf=ndkf 1;
WRJPG(ppc);//--核心转换函数
}
catch(...){}
}
}
Form1->ProgressBar1->Position=mk;
Form1->ProgressBar1->Visible=false;
Form1->FileListBox1->Update();
String dkc="";
dkc=dkc "共有" IntToStr(ndkf).c_str() "个图片文件进行成功转换"; ;
Application->MessageBox(dkc.c_str(),"信息",48);
}
Form1->Button8->Enabled=true;
}
核心转换函数WRJPG();
void __fastcall TForm1::WRJPG(AnsiString filename)
{
if(p<=0 || q<=0) return ;//转换像素的宽度和高度
if(p>0