最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Qt實現(xiàn)將BMP圖像數(shù)據(jù)存入SQLite數(shù)據(jù)庫

 更新時間:2025年06月26日 09:46:32   作者:XXYBMOOO  
這篇文章主要為大家詳細(xì)介紹了如何使用 Qt 框架實現(xiàn)了將 BMP 圖像文件以二進制形式存入 SQLite 數(shù)據(jù)庫,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

本項目通過 Qt 框架實現(xiàn)了將 BMP 圖像文件以二進制形式存入 SQLite 數(shù)據(jù)庫,并可從數(shù)據(jù)庫中讀取還原為 BMP 圖像文件的功能,適用于需要圖像與結(jié)構(gòu)化數(shù)據(jù)統(tǒng)一管理的場景。

整個流程分為兩個主要部分:

一、圖像保存到數(shù)據(jù)庫

程序首先連接指定的 SQLite 數(shù)據(jù)庫,若數(shù)據(jù)庫文件不存在將自動創(chuàng)建。在讀取本地 BMP 圖像文件后,將其內(nèi)容作為二進制數(shù)據(jù)(BLOB)保存至數(shù)據(jù)庫中的一張名為 Images 的數(shù)據(jù)表中。表結(jié)構(gòu)簡單,僅包含自增主鍵 id 和存儲圖像數(shù)據(jù)的 data 字段。若數(shù)據(jù)表尚未存在,程序會自動創(chuàng)建。

通過這種方式,圖像內(nèi)容不再依賴文件系統(tǒng)存儲,而是與應(yīng)用數(shù)據(jù)一同保存在數(shù)據(jù)庫中,有利于集中管理、版本控制與數(shù)據(jù)傳輸。

二、從數(shù)據(jù)庫讀取圖像并保存為文件

讀取部分通過指定圖像的 id 值從數(shù)據(jù)庫中查詢對應(yīng)的 BLOB 數(shù)據(jù),并將其以 BMP 格式寫入本地文件。程序在執(zhí)行過程中提供異常判斷,例如數(shù)據(jù)庫連接失敗、圖像記錄不存在、文件寫入失敗等,確保操作的穩(wěn)定性和可追蹤性。

三、應(yīng)用場景與擴展性

該方案適用于圖像歸檔、數(shù)字資源管理、數(shù)據(jù)庫驅(qū)動的圖像瀏覽系統(tǒng)等場景。雖然本文示例以 BMP 圖像為主,但該方法同樣適用于任意格式的二進制文件,如 PNG、JPG、PDF 等,只需調(diào)整文件處理部分即可。此外,數(shù)據(jù)庫結(jié)構(gòu)可擴展,如添加圖像名稱、分類標(biāo)簽、時間戳等字段,實現(xiàn)更復(fù)雜的圖像管理系統(tǒng)。

本項目展示了如何將 Qt 與 SQLite 結(jié)合,實現(xiàn)圖像與數(shù)據(jù)庫之間的數(shù)據(jù)交互,具有良好的通用性與可拓展性,為相關(guān)應(yīng)用開發(fā)提供了一種簡潔實用的實現(xiàn)思路。

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QFile>
#include <QDebug>

void saveBmpToDatabase(const QString &imagePath, const QString &databasePath)
 {

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(databasePath);

    if (!db.open()) 
    {
        qDebug() << "無法打開數(shù)據(jù)庫";
        return;
    }

    // 讀取BMP圖像文件
    QFile file(imagePath);
    if (!file.open(QIODevice::ReadOnly)) 
    {
        qDebug() << "無法打開圖像文件";
        return;
    }

    QByteArray imageData = file.readAll();
    file.close();

    QSqlQuery query;
    query.exec("CREATE TABLE IF NOT EXISTS Images (id INTEGER PRIMARY KEY, data BLOB)");

    query.prepare("INSERT INTO Images (data) VALUES (:data)");
    query.bindValue(":data", imageData);

    if (!query.exec())
    {
        qDebug() << "插入圖像數(shù)據(jù)失敗";
    } else 
    {
        qDebug() << "圖像數(shù)據(jù)插入成功";
    }

    db.close();
}

int main(int argc, char *argv[]) 
{
    QCoreApplication a(argc, argv);

    QString imagePath = "a.bmp";
    QString databasePath = "image.db";

    saveBmpToDatabase(imagePath, databasePath);

    return a.exec();
}
#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QFile>
#include <QDebug>

void loadBmpFromDatabase(const QString &outputPath, const QString &databasePath, int imageId)
 {

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName(databasePath);

    if (!db.open()) 
    {
        qDebug() << "無法打開數(shù)據(jù)庫";
        return;
    }

    QSqlQuery query;
    query.prepare("SELECT data FROM Images WHERE id = :id");
    query.bindValue(":id", imageId);

    if (!query.exec()) 
    {
        qDebug() << "讀取圖像數(shù)據(jù)失敗";
        return;
    }

    if (query.next())
     {
        QByteArray imageData = query.value(0).toByteArray();

        QFile file(outputPath);
        if (!file.open(QIODevice::WriteOnly)) {
            qDebug() << "無法打開輸出文件";
            return;
        }

        file.write(imageData);
        file.close();

        qDebug() << "圖像已保存到" << outputPath;
    } else {
        qDebug() << "未找到指定的圖像";
    }

    db.close();
}

int main(int argc, char *argv[]) 
{
    QCoreApplication a(argc, argv);

    QString outputPath = "b.bmp";
    QString databasePath = "image.db";
    int imageId = 1; 

    loadBmpFromDatabase(outputPath, databasePath, imageId);

    return a.exec();
}

 到此這篇關(guān)于基于Qt實現(xiàn)將BMP圖像數(shù)據(jù)存入SQLite數(shù)據(jù)庫的文章就介紹到這了,更多相關(guān)Qt圖像數(shù)據(jù)存入SQLite內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 記一次ADL導(dǎo)致的C++代碼編譯錯誤的原因及解決方法

    記一次ADL導(dǎo)致的C++代碼編譯錯誤的原因及解決方法

    文章分析C++ ADL機制導(dǎo)致的print函數(shù)沖突,因<iostream>間接包含<print>頭文件,建議重命名或使用限定名稱解決,并強調(diào)IDE提示減少冗余頭文件以避免編譯問題,感興趣的朋友一起看看吧
    2025-07-07
  • C++實現(xiàn)管理系統(tǒng)的示例代碼

    C++實現(xiàn)管理系統(tǒng)的示例代碼

    這篇文章主要介紹了C++實現(xiàn)管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C++實現(xiàn)LeetCode(115.不同的子序列)

    C++實現(xiàn)LeetCode(115.不同的子序列)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(115.不同的子序列),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 淺談C++中字符串輸入get與getline的區(qū)別

    淺談C++中字符串輸入get與getline的區(qū)別

    這篇文章主要介紹了C++中字符串輸入get與getline的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++ find函數(shù)及用法小結(jié)

    C++ find函數(shù)及用法小結(jié)

    string類的find()函數(shù)用于在字符串中查找字符或子串,返回第一個匹配的位置,C++中的find()函數(shù)有多種用法,本文通過實例代碼給大家詳細(xì)講解,感興趣的朋友一起看看吧
    2023-12-12
  • OpenCV基于距離變換和分水嶺實現(xiàn)圖像分割

    OpenCV基于距離變換和分水嶺實現(xiàn)圖像分割

    圖像分割是根據(jù)灰度、顏色、紋理和形狀等特征,把圖像分成若干個特定的、具有獨特性質(zhì)的區(qū)域。本文將基于距離變換和分水嶺實現(xiàn)圖像分割,需要的可以了解一下
    2022-09-09
  • C語言實現(xiàn)斗地主的核心算法

    C語言實現(xiàn)斗地主的核心算法

    本文給大家分享的是使用C語言實現(xiàn)的斗地主游戲的核心算法,主要實現(xiàn)了面向?qū)ο笤O(shè)計,洗牌、發(fā)牌、判斷牌型、比較牌的大小、游戲規(guī)則等算法。通過這個斗地主小項目的練習(xí),提高了我的面向?qū)ο笤O(shè)計能力,加深了對算法的理解。最近把這些設(shè)計和算法分享給大家。
    2015-03-03
  • C++ Boost Heap使用實例詳解

    C++ Boost Heap使用實例詳解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C++枚舉類型用法總結(jié)(枚舉字符常量代替常量)

    C++枚舉類型用法總結(jié)(枚舉字符常量代替常量)

    這篇文章主要介紹了C++枚舉類型用法總結(jié)(枚舉字符常量代替常量),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • C語言時間處理從基礎(chǔ)獲取到高級應(yīng)用總結(jié)大全

    C語言時間處理從基礎(chǔ)獲取到高級應(yīng)用總結(jié)大全

    在C語言編程中,是一個非常重要的標(biāo)準(zhǔn)庫,它提供了處理日期和時間的一系列函數(shù),這篇文章主要介紹了C語言時間處理從基礎(chǔ)獲取到高級應(yīng)用的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-08-08

最新評論

永平县| 洱源县| 方山县| 五家渠市| 舟山市| 五寨县| 绥棱县| 玉田县| 南平市| 措美县| 新巴尔虎左旗| 福海县| 鹿邑县| 南漳县| 若尔盖县| 迁安市| 正镶白旗| 五台县| 荃湾区| 呼和浩特市| 黄陵县| 那坡县| 镇远县| 墨竹工卡县| 广宁县| 新密市| 安阳市| 和顺县| 望谟县| 鹤峰县| 济宁市| 利川市| 宁晋县| 美姑县| 宜兴市| 镇雄县| 盐城市| 清徐县| 柳江县| 平湖市| 馆陶县|