Image1->Transparent=true;
bitmap1->TransparentColor=bitmap1->Canvas->Pixels[3][3]; //指定透明色
Image1->Picture->Bitmap->Assign(bitmap1);
}
(2)编译运行该程序,可以实现图像特殊的显示效果。 3.程序分析与说明
cn ok
图像的特殊显示效果,其实质是将图像的各个像素点的颜色加以有规律的变化,使用 Sleep函
数来延迟这一变化过程。常见的特殊显示效果还有百叶窗显示,图像柔化和锐化等等。
4图片的相互转换
4.1知识要点
TJPEGImageC++Builder提供了 类。
TJPEGImage类来支持 JPEG图像,调用 TJPEGImage的 SaveToFile
方法可
以将位图文件保存为 JPEG图像。要使用 TJPEGImage,必须加入
的常用属性及说明如表 5所示。
表 5 TJPEGImage的常用属性及说明
属性 用途 取值范围 CompressionQuality 设置 JPEG图像的清晰 1~ 100,效果由差到好 度 Empty 检查是否装载有图像 true和 false Height 表示装载图像的高度 非负的整数 Width 表示装载图像的宽度 非负的整数
PixelFormat 描述图像颜色的位数 bo 8, 24 方法有 AssignTJPEGImage.n
(
Tbitmap *bitmap的主要):; 函数用法:
如下段代码所描述,使用 Assign,Timage组件的 Picture属性的 Bitmap
被赋给了 jpg1。
TJPEGImage *jpg1;
jpg1=new TJPEGImage
jpg1->Assign(Image1->Picture->Bitmap);
jpg1->SaveToFile(savename); SaveToFile(String filename) 函数用法:
如上段代码使用 SaveToFile
方法,TJPEGImage类的图像被保存为 JPEG格式的文件。
4.2实例制作—— JPEG图像和 bmp图像的相互转换
1.程序设计思路
C++Builder 6的 TImage控件直接支持 Bitmap格式(.bmp)、Icon
格式(.ico)、Metafile格式(.emf
or .wmf)和 JPEG格式的图像文件的打开显示。在程序设计中可以把这几种格式的文件直接赋给 TImage控件的 Picture属性。但是为了实现 JPEG图像和
bmp图片的相互保存转换,就必须在程序
中加入 TJPEGImage类和 Tbitmap类。
为实现将位图保存为 JPEG格式的文件,就必须将 TImage控件的 Picture属性的 Bitmap赋给
TJPEGImage,然后利用 TJPEGImage
为实现将 JPEG格式保存为位图,就必须将 的 SaveToFile方法来保存 JPEG图像。
TImage控件的 Picture属性的 Graphic赋给 Tbitmap,
然后利用 Tbitmap的 SaveToFile
方法来保存位图图像。 2.程序实现步骤
(1)打开 C++Builder,生成一个新的应用程序。往窗体加入的组件及其属性如表
※ 16※
6所示。
o
.
.n
cn w. ww 加入的组件 Form
ok 属性 属性值 Form1 Jpeg图像和 Bmp图像的相互转换 Image1 true OpenPictureDialog1 SavePictureDialog1 Button1 打开图像 Button2 保存图像 表 6加入的组件及其属性Name Caption Name AutoSize Name Name Name Caption Name Caption
et Image OpenPictureDialog SavePictureDialog Button Button ok
ww
设定好的程序界面如图 6所示。
ok cn ok
图 6设定好的程序界面
(2)定义头文件和全局变量。 #include
String openname; //openname表示打开图像的文件名
String extension; //extension表示打开图像的文件名的扩展名
(3)编写单击 Button1 的 OnClick事件,打开一幅图像,装载到 TImage控件的 Picture属性中, 编写代码如下:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenPictureDialog1->Execute()) {
openname=OpenPictureDialog1->FileName;
extension=openname.SubString(openname.Length()-2,3); Image1->Picture->LoadFromFile(openname ); }
}
(4)编写单击 Button2的 OnClick 事件,实现 JPEG图像和 bmp图像的相互转换,编写代码如 下:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitmap *bitmap1;
bitmap1=new Graphics::TBitmap; //生成 TBitmap类的实例 TJPEGImage *jpg1;
类的实例 jpg1=new TJPEGImage; //生成 TJPEGImage
if(SavePictureDialog1->Execute()) {
String savename=SavePictureDialog1->FileName;
String exten=savename.SubString(savename.Length()-2,3);
if((UpperCase(exten)==\(exten)==\)&& UpperCase(extension)
==\)
//将位图保存为 JPEG格式的文件
{
(Image1->Picture->Bitmap); jpg1->Assign
jpg1->SaveToFile(savename);
※ 17※
o
}
else if((UpperCase(exten)==\(UpperCase(exten extension)==\)
|| UpperCase(extension)==\))
//将 JPEG格式保存为位图
{
bitmap1->Assign(Image1->Picture->Graphic);
bitmap1->SaveToFile(savename);
} else
Image1->Picture->SaveToFile(savename); //同一图片格式的保存
}
}
(5)运行该程序,就可以实现 JPEG图像和 BMP图像的显示以及它们之间的相互转换。 3.程序分析与说明
cn ok
在使用保存图像文件对话框时,一定要将保存文件的扩展名也写出来,不然程序会认为此文件 没有扩展名,导致程序出错。
5字体修饰
5.1知识要点
1. Tcanvas的 Font属性
Font性质是用来控制 Canvas上的文字所使用的字体格式。
、Name、Size、Style等方式来分别改变字体的颜色、使用的字体 在程序中可以利用设定 Color
名称、字体大小及字体的样式。
1)Color属性 2)Size属性
Tfont的 Color性质和其他组件的 Color属性相同,用来设置字体的颜色。
Size属性表示字体的大小,以磅为单位。例如可以设定: Canvas->Font->Size=12; 3)Style属性
Style属性用以表示字体的样式。它包含以下几种样式:
fsBold:粗体。 fsItalic:斜体。 fsUnderline:有下划线。
fsStrikeOut:穿越文字的水平直线。 4)Name属性
Name属性表示使用字体的名称。可以用以下的方式来设定字体名称: Canvas->Font->Name=\楷体\ //设定字体为楷体 2. TextOut函数
函数原型:
Canvas->TextOut(int X,int Y,String Text); 参数说明:
使用该函数就是在 Canvas上指定的坐标输出指定的文本。
5.2实例制作——显示三维文字
1.程序设计思路
在程序中添加一个设置字体的对话框,作为设定显示文本的字体格式。利用 TextOut 在窗体中 指定的位置显示输入的文字。再将指定的位置稍微错位,叠加显示输入的文字,依次重复若干次,
※ 18※
o
就可以得到比较满意的三维文字效果。
2.程序实现步骤
Form cn ok
(1)打开 C++Builder,生成一个新的应用程序。往窗体中加入的组件如表 7所示。
表 7窗体中加入的组件及其属性
属性 Name Caption Name Name Caption Name 加入的组件 属性值 .n ok Form1 显示三维文字 FontDialog1 Button1 设定字体 Button2 FontDialog Button Button
Caption 输入文字 Button Name Button3 Caption 显示 3维文字 设定好的程序界面如图
7所示。
ok
ok cn
. cn ww
设定好的程序界面
(2)定义全局变量:
String str; //表示要显示的文本
TColor fontcolor; (3)编写单击 //用来保存三维文字表层的颜色 Button1的 OnClick事件,设定字体的格式,编写代码如下: void __fastcall TForm1::Button1Click (TObject *Sender) {
if(FontDialog1->Execute()==true) //打开设定字体的对话框 {
Canvas->Font->Name=FontDialog1->Font->Name; // 设定字体名称
Canvas->Font->Size=FontDialog1->Font->Size;
//设定字体大小 fontcolor=FontDialog1->Font->Color; //设定字体颜色
}
}
(4)编写单击 Button2 的 OnClick事件,输入要显示的文本,编写代码如下: void __fastcall TForm1::Button2Click {
(TObject *Sender)
str = InputBox(\请输入要显示的文字:\你好,中国!\);
//利用 InputBox函数来输入要显示的文本
}
(5)编写单击 Button3的 OnClick事件,实现刷新屏幕,编写代码如下:
void __fastcall TForm1::Button3Click(TObject *Sender ) {
Refresh();
}
(6)编写窗体的 FormPaint事件,实现三维文字的显示,编写代码如下:
void __fastcall TForm1::FormPaint (TObject *Sender)
{ int i,l; Canvas->Brush->Style=bsClear; //设定画刷格式
※ 19※
o et
图7
.n
ok
l=Canvas->Font->Size;
cn l=l/3; //l用来根据要显示文字的字体大小来设定三维文字的效果for(i=100;i<(100+l);i++)
{
Canvas->Font->Color=RGB(255-i,255-i,255-i);
Canvas->TextOut(i,i,str); //错位叠加显示三维文字的阴影部分
}
Canvas->Font->Color=fontcolor;
Canvas->TextOut(i,i,str); //显示三维文字的表层}
(7)编译运行,程序运行结果是:单击 “输入文字”按钮,在弹出的如图 8所示的对话框中输
入“你好,中国!”。
.n
图 8输入对话框
(8)单击“OK”按钮返回。单击“设定字体”按钮,在弹出的如图
9所示的对话框中设定字
体格式。
bo.n w. bo
图 9“字体”对话框
(9)单击“显示 3维文字”按钮,就可以在窗体上得到如图 10所示的三维文字。
ww
.n bo
图 10程序生成的三维文字
3.程序分析与说明
三维文字的显示形式是多姿多彩的,例如,可以在本例介绍的
FormPaint函数中,改变 i,l的取值,就可以获得不同效果的三维文字:
在 FormPaint中的代码“Canvas->Font->Color=fontcolor;”的后面,加一句
“i=100;”,就可以得 到如图 11所示的三维文字。
w.c o w
图 11程序生成的另一形式的三维文字 ※ 20※
o
.
.n