免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1902 | 回复: 0
打印 上一主题 下一主题

在Qt中如何加载图像以及保存图像到数据库中(转) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-19 10:53 |只看该作者 |倒序浏览
在Qt中如何加载图像以及保存图像到数据库中
先前写过一个在PHP中往数据库中保存图像以及如何读取显示出来:
http://www.qtcn.org/blog/blog.php?do-showone-itemid-479-type-blog.html
现在遇到了在Qt中把图像保存到数据库中(以BLOB类型保存)的问题,这里总结一下,供各位朋友参考
基本的思想和前面的使用PHP保存头像是一样的,这里以例子解说
1、加载一个头像到界面上显示出来(labelZhaoPian的大小是80x96)
     显示头像,这里用QLabel来显示,代码如下:
    extern QString g_strCurrentDir;
    QString strImage = QFileDialog::getOpenFileName(this, "请选择照片文件", g_strCurrentDir, "图像文件 (*.png *.jpg *.bmp *.gif)");
    if (strImage.isNull())
    {
        return;
    }
    g_strCurrentDir = QDir(strImage).absolutePath();
    labelZhaoPian->setPixmap(QPixmap(strImage).scaled(labelZhaoPian->size()));
相应地,清除头像的代码就很简单了
        labelZhaoPian->setPixmap(QPixmap());
    labelZhaoPian->setText("照\n\n片");
2、保存图像到数据库中,以PNG格式
    if (labelZhaoPian->pixmap()->isNull() == false)
    {
        QByteArray bytes;
        QBuffer buffer(&bytes);
        buffer.open(QIODevice::WriteOnly);
        labelZhaoPian->pixmap()->save(&buffer, "PNG");
                QString out;
            for(int n = 0; n
3、从数据库中读取出图像来,并显示
        QSqlQuery q("SELECT photo FROM profile WHERE iprofileid = 1");
         if (q.next())
         {
            if (q.isNull(0) == false)
        {
            QPixmap photo;
            photo.loadFromData(q.value(0).toByteArray(), "PNG");
            labelZhaoPian->setPixmap(photo);
        }
         }
                       
            
              
            
            欢迎到
XChinux
的个人主页看更多内容
阅读全文
(2029) |
回复
2 |


推送
                       
              
              
               
                               
                               
                               
guest
于 2007-09-15 00:07XChinux你好
我用的代码片段如下:
        QFile* file=new QFile(fileName);  //fileName为二进制数据文件名
        file->open(QIODevice::ReadOnly);
        QSqlQuery query;
       query.prepare("INSERT INTO myTestDB (Id, BlobData) "
                                   "VALUES (?, ?)");
                                   
       QString tmp=nameEdit->text();  //nameEdit是自己定义的QLineEdit输入框名字
       QVariant name(tmp);
       query.addBindValue(name);
       QByteArray Data;
       Data=file->readAll();
       file->close();
       query.addBindValue(Data);
       query.exec();
这样把图像保存到数据库里,代码也还算清晰。
不过,现在有一个问题:
我是用的256M内存的赛阳2.4GHz的Windows2000系统下的Access做的测试,
把10M的mp3音频文件保存到数据库用时在22秒左右,内存占用50M;
当我试图将100M的视频文件保存到数据库时,系统无响应!!!
我尝试将100M文件分割成10M的数据块逐块保存,没有发现合适的append()函数
不知道您是否能提供一点在Qt下将100M以上的大文件保存到数据库的建议呢?
谢谢。
                               
                               
                               
guest
于 2007-09-15 09:45这个是与数据库有关系的吧,看数据库的bin类型字段最大存储多少的数据。引自:http://www.qtcn.org/blog/article.php?itemid-627-type-blog.html
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/69947/showart_1423505.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP