超简单的数码相框制作

本人个人域名网址:http://zhangrunsheng.cn/ (所有文章首发地址)


项目名称:数码相框(简单)

项目分类:嵌入式应用开发

PC机系统环境:ubuntu10.04

PC机Qt版本:QMake version 2.01a                 Using Qt version 4.5.3       Qt Creator 1.2.0 based on Qt 4.5.2

开发板:loongson 1B

开发板系统环境:嵌入式Linux

开发板Qt版本:QMake version 2.01a               Using Qt version 4.5.3

 

1.   项目介绍

数码相框: Digital Photo Frame

数码相框是观看和分享数码照片的专用设备。

数码相框是展示数码照片而非纸质照片的相框。数码摄影必然推动数码相框的发展,因为全世界打印的数码相片不到35%。数码相框通常直接插上相机的存储卡展示照片,当然更多的数码相框会提供内部存储空间以接外接存储卡功能。数码相框就是一个相框,不过它不再用放进相片的方式来展示,而是通过一个液晶的屏幕显示,它可以通过读卡器的接口从SD卡获取相片,并设置循环显示的方式,比普通的相框更灵活多变,也给现在日益使用的数码相片一个新的展示空间。

 

目前实现功能:

  • 打开一张图片并显示
  • 打开一文件夹下所以的图片并播放
  • 播放图片时刻通过点击屏幕进行暂停或继续
  • 暂停时可以手动点击下一张、上一张

 

2.   实现过程

在qtcreator下新建一个Qt4GUI应用 项目  ---  Digital_photo_frame

2.1.  打开并显示一张图片功能

在Qt中,Qt提供给了4个图像类:QImage/QPixmap/QBitmap/Qpicture。

而用Qt程序在嵌入式上显示一幅图片,分别使用QImage/Qpixmap有以下两种方法:

 

//dangerous should not beused, cannot display earth.png, 
//but if we changeearth.png to a smaller image e.g. apple.png, apple.png can be displayed
QPixmap pixmap;
 
pixmap.load(":/pics/*.png" );
 
label->setPixmap(pixmap );


 

 

//dangerous should not beused, cannot display earth.png,  
//but if we changeearth.png to a smaller image e.g. apple.png, apple.png can be displayed
 
QPixmap pixmap; 
pixmap.load(":/pics/*.png" ); 
QPainter painter(this); 
painter.drawPixmap(0,0,pixmap);


 

而我则同时使用两个类对显示的图片就行了优化,即采用Qimage优化图片尺寸,Qpixmap缓存绘图的方式。

以下的代码实现:

 

void Digital_photo_frame::Show_img(QString fileName,int imgW)
{//打开一张图片并显示,fileName为文件路径,imgW为图片宽度

    if (!fileName.isEmpty()) {
    QImage image;
    //image.scaled(360,176,Qt::KeepAspectRatio);
    image.load(fileName);
    double showwidth= static_cast<double>(imgW);
    double showheight= static_cast<double>((static_cast<double>(image.width())*showwidth)/image.height());
    //double showwidth= static_cast<double>(width());
    //double showheight= static_cast<double>(height());

        if (image.isNull()) {
            QMessageBox::information(this, tr("Image Viewer"),
                                      tr("Cannot load %1.").arg(fileName));
    return;
}
    QPixmap _pixmap =QPixmap::fromImage(image.scaled(showwidth, showheight,Qt::KeepAspectRatio));
    ui->imglabel->setPixmap(_pixmap);
    ui->imglabel->adjustSize();
     }
}

打开一张图片可以用QFileDialog类来操作,以下是这个功能的代码实现:

void Digital_photo_frame::on_open_file_triggered()
{
    QFileDialog *fileDialog = new QFileDialog(this);
    //fileDialog->setViewMode(QFileDialog::List);
    //fileDialog->setGeometry(10,10,200,150);
    qDebug() << "QFileDialogminimumWidth:" << QString::number(fileDialog->minimumWidth(),10);
    QString fileName = fileDialog->getOpenFileName(this,tr("Open Image Files"),"/",tr("Images (*.gif *.png *.bmp *.jpg)"));    
    Show_img(fileName,480);
    ui->actionFull_screen->setEnabled(true);

}


2.2.  播放图片功能

播放功能实现原理:使用一个定时器,在每次定时器触发后,调用一次显示图片动作,然后等定时器再次触发后,再显示下一次图片处理动作。以下是代码实现:

// 在头文件声明定时器
QTimer *Player_Timer;


//在定义cpp里面的构造函数里面创建定时器
Digital_photo_frame::Digital_photo_frame(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::Digital_photo_frame)
{
    ui->setupUi(this);
        
    Player_Timer = new QTimer(this);
    connect( Player_Timer, SIGNAL(timeout()), this, SLOT(Player_img()) );
}

//与定时器判断的函数
void Digital_photo_frame::Player_img()
{
    Player_img(list,path,i,480);
    if (i>=0 && i<(count-1))
    {
        i++;
    }
    else
    {
        i=0;
    }
}

void Digital_photo_frame::Player_img(QFileInfoList list,QString path,int i,int imgW)
{    //打开并显示一个list中的一张图片,list为文件夹下所有图片的列表,i为列表的第(i+1)张图片,imgW为图片显示宽度
    QFileInfo fileInfo = list.at(i);
    path=fileInfo.filePath();
    Show_img(path,imgW);
}


最终的功能函数:
void Digital_photo_frame::on_actionPlayer_triggered()
{
    on_actionFull_screen_triggered();
    QDir picdir("./tupiang");
    QStringList filters;
    filters << "*.bmp" << "*.jpg" << "*.png" << "*.gif";
    picdir.setNameFilters(filters);
    list = picdir.entryInfoList();
    count = list.count();qDebug() << "path:" << path ;
    qDebug() << "picdir:" << picdir  ;
    qDebug() << "count:" << count ;
    Player_Timer->start(5000);
}

2.3.  暂停和继续播放功能

点击屏幕触发鼠标事件,进而实现暂停功能,其实现原理是,当点击屏幕使触发鼠标单击事件,在事件里判断定时器状态进而实现暂停和继续播放功能。以下是代码实现功能:

 开启鼠标事件得在构造函数里添加以下一句:

this->setMouseTracking (true);

功能实现:

void Digital_photo_frame::mousePressEvent ( QMouseEvent * e )//鼠标单击事件响应
{   
    if ( Player_Timer->isActive() )
    {
        Player_Timer->stop();
    }
    else{Player_Timer->start(5000);}
}

 

2.4.  手动上下一张功能

代码实现:

void Digital_photo_frame::on_pBtn_next_clicked()//下一张
{
    if(count>=0){
    if (i>=0 && i<(count-1))
    {
        i++;
    }
    else
    {
        i=0;
    }
    Player_img(list,path,i,480);
}

void Digital_photo_frame::on_pBtn_last_clicked()//上一张
{
    if(count>=0){
    if (i>0 && i<=(count-1))
    {
        i--;
    }
    else
    {
        i=(count-1);
    }
    Player_img(list,path,i,480);
}

 

3.   其他

当程序编译好后放到开发板上播放会发现播放不了jpg、gif等图片格式。

解决方法:

利用Qt的plugins机制

解决过程:

1.条件设定:

在移植Qt在开发板上时,编译参数已开启了对这些图片格式的支持(如何知道?查看你的Qt/E的安装路径,在路径下有一个plugins文件夹,plugins下有imageformats文件夹,该文件夹下若有以下几个库就对了(如下图))

 

2.设置环境变量:

在PC的终端下执行以下两条命令:

export LD_LIBRARY_PATH=$QTDIR/plugins/imageformats:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins

 

3.修改pro文件      

 在Qt项目的pro文件中增加QTPLUGIN += qjpeg  qgif

4.        在开发板运行:

把PC机上的图片插件库复制到开发板上并如同第二步一样设置开发板的环境变量,然后就可以运行了。


END……



 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数码大师是国内发展最久、功能最强大的优秀多媒体电子相册制作软件,让您轻松体验各种专业数码动态效果的制作乐趣。数码大师可以在您制作好的本机电子相册基础上,通过简单的打包设置,即可自动生成可分发的礼品包相册,可以作为自己收藏分类相片之用,您更可以作为礼物方便的分发出去。   数码大师具体功能如下: 1. 家庭本机数码相册制作: “本机电子相册”可轻松将您喜欢的图片数码相机拍出的照片等进行数码变换处理,配上动听的背景音乐、众多专业图像特效、独特的文字特效和丰富的注释功能等,制造出一流专业效果的家庭数码相册。 2. 礼品包相册制作: 可以在您制作好的本机电子相册基础上,通过简单的打包设置,即可自动生成可分发的礼品包相册,可以作为自己收藏分类相片之用,您更可以作为礼物方便的分发出去,对方无需安装,即可让亲朋好友和您一起分享动感的数码礼品! 3. 视频影像文件导出功能(视频相册制作): 视频导出功能可以将您看到的相框内所有情景直接导出为VCD/SVCD甚至是DVD高清晰MPG视频电子相册。让您轻松制作专业绚丽的VCD/SVCD/DVD数码相册成为可能,让所有拥有VCD/DVD家庭影碟机的亲朋好友都可以更方便的无需电脑即可欣赏您创作的礼物! 4. 网页数码相册制作: 通过打包导出为网页相册,您可以将漂亮绚丽的数码相集放到因特网或直接分发网页的形式,让世界各地的人通过上网或直接打开浏览器立即欣赏您的精彩制作! 5. 多媒体锁屏相册制作: 只要在制作好的本机电子相册基础上简单选择,软件即可自动转变成一个靓丽的多媒体锁屏系统,在您离开电脑时,不但可以展现您精心创作的精美相册,还可以实时锁定视窗并安全保护您的系统,实现文字留言、密码保护等各种先进功能,同时又兼具有屏幕保护用途,应用非常广泛,是独创的全新概念型跨界数码相册。   数码大师 2013 v32.9 Build 8300 白金版更新: 加入了镜头缩放特效,允许您的照片被动态顺滑地放大或缩小,营造一种电影拉伸镜头的感觉,让静态的照片变得动感起来。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值