现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文

题库2022-08-02  61

问题 现欲实现一个图像浏览系统,要求该系统能够显示BMP、JPEG和GIF三种格式的文件,并且能够在Windows和Linux两种操作系统上运行。系统首先将BMP、JPEG和GIF三种格式的文件解析为像素矩阵,然后将像素矩阵显示在屏幕上。系统需具有较好的扩展性以支持新的文件格式和操作系统。为满足上述需求并减少所需生成的子类数目,采用桥接(Bridge)设计模式进行设计,所得类图如图6-1所示。采用该设计模式的原因在于:系统解析BMP、GIF与JPEG文件的代码仅与文件格式相关,而在屏幕上显示像素矩阵的代码则仅与操作系统相关。【C++代码】class Matrix{//各种格式的文件最终都被转化为像素矩阵//此处代码省略};class ImageImp{public:virtual void doPaint(Matrix m)=0;//显示像素矩阵m};class WinImp:public ImageImp{public:void doPaint(Matrix m){/*调用Windows系统的绘制函数绘制像素矩阵*/}};class LinuxImp:public ImageImp{public:void doPaint(Matrix m){/*调用Linux系统的绘制函数绘制像素矩阵*/}};class Image{public:void setImp(ImageImp*Imp){(1)=imp;}virtual void parseFile(string fileName)=0;protected:(2)*imp;};class?BMP:public Image{public:void parseFile(string fileName){//此处解析BMP文件并获得一个像素矩阵对象m(3);//显示像素矩阵m}};class?GIF:public Image{//此处代码省略};class?JPEG:public Image{//此处代码省略};void main(  ){//在windows操作系统上查看demo.bmp图像文件Image*image1=(4);ImageImp*imageImp1=(5);(6);Image1->parseFile(“demo.bmp”);}现假设该系统需要支持10种格式的图像文件和5种操作系统,不考虑类Matrix,若采用桥接设计模式则至少需要设计(7)个类。

选项

答案

解析 (1)this->imp
(2)ImageImp
(3)imp->doPaint(m)
(4)new?BMP()
(5)new?WinImp()
(6)image1->setImp(imageImp1)
(7)17
根据题目描述,在设计该图像显示系统时主要分为两个步骤:一是读取各种文件并将文件内容转换成像素矩阵,因为各种图片格式不同,因此需要针对每一种图片格式编写文件读取代码,而该代码与操作系统平台无关。将像素矩阵显示到屏幕上时,由于和操作系统相关,因此需要把该代码和读取文件代码相分离。设计中的Image类表示抽象的图像概念,Image类中就包含了读取文件接口和设置实现平台接口;Image的子类BMP、GIF和JPEG分别负责读取各种不同格式的文件;ImageImp的主要任务是将像素矩阵显示在屏幕上,因此,它存在两个子类,分别实现Windows系统和Linux系统上的图像显示代码。空缺(1)处主要是设置将在哪个平台上进行实现,因此该处应该存储参数所传递的对象,由于该类的成员变量也是imp,与参数相同,因此需要填写this->imp;同理,该成员变量的类型和参数的类型应该保持相同,空(2)处应该填写ImageImp;空(3)处需要根据imp成员变量存储的实现对象来显示图像;在空(4)处需要生成一个BMP对象;由于需要在Windows平台上实现,因此空(5)处需要生成一个WinImp对象,同时,还需设置该BMP对象,应采用WinImp对象来实现显示。采用桥接模式能够将文件分析代码和图像显示代码分解在不同的类层次结构中,如果不考虑中间使用的Matrix等类,那么最后需要设计的类包括2个父类,对应文件格式子类,对应操作系统平台类,因此10种图像格式和5种操作系统需要17个类。
转载请注明原文地址:https://tihaiku.com/congyezige/2409907.html

最新回复(0)