廣告代理商的插畫員正在設計某位客戶的新印刷廣告。 插畫員想要在廣告背景中使用特定藍色陰影,並且想瞭解代理商先前建立的印刷廣告是否曾使用 該顏色。 插畫員的作法是執行應用程式,依內容去搜尋影像。 影像儲存在資料庫表格中 (請參閱圖 1)。 該應用程式要求使用者提供一個視覺範例, 亦即可用來示範指定顏色的影像。然後應用程式分析範例中的顏色,並尋找顏色與範例最相近的影像。
下列圖表顯示一個視覺範例,以及最接近其顏色的擷取影像。
![]() |
下列範例顯示該應用程式的一些重要元素。 請注意,該應用程式使用一個稱為 QbQueryCreate 的 QBIC API 來建立 QBIC 查詢、 使用 QbQueryAddFeature 和 QbQuerySetFeatureData 來將顏色選擇新增至查詢、 使用 QbQuerySearch 來發出查詢、及使用 QbQueryDelete 來刪除查詢。 應用程式也使用一個稱為 DBiBrowse 的圖形 API 來顯示所擷取的影像。
#include <dmbqbqpi.h> #define MaxQueryReturns 10 static SQLHENV henv; static SQLHDBC hdbc; static SQLHSTMT hstmt; static SQLRETURN rc; void main(int argc, char* argv[]) { char line[4000]; char* handles[MaxQueryReturns]; QbQueryHandle qHandle=0; QbResult results[MaxQueryReturns]; SQLINTEGER count; SQLINTEGER resultType=qbiArray; SQlAllocEnv(&henv); SQLAllocConnect(henv, &hdbc); rc = SQLConnect(hdbc, (SQLCHAR*)"qtest", SQL_NTS, (SQLCHAR*)"", SQL_NTS, (SQLCHAR*)"", SQL_NTS); if (argc !=2) { printf("usage: query colorname\n"); exit(1); } QbImageSource is; is.type = qbiSource_AverageColor; /* run the get color subroutine */ getColor(argv[1], is.average.Color); QbQueryCreate(&qhandle); QbQueryAddFeature(qhandle, "QbColorFeatureClass"); QbQuerySetFeatureData(qhandle, "QbColorFeatureClass",&is); QbQuerySearch(qhandle, "ADS", "ADS_IMAGE", 10, 0, resultType &count, results); for (int j = 0; j <count; j++) { printf(j,":\n"); DBiBrowse("usr/local/bin/xv %s", MMDB_PLAY_HANDLE, handles[j], MMDB_PLAY_WAIT); } QbQueryDelete(qhandle); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); } |