广告发布代理的图形演示者正在为客户开发新的印刷广告。 该演示者想在广告的背景中使用特定形状的蓝色, 并想在代理创建印刷广告之前查看是否已使用了该颜色。要那样做, 图形演示者运行按内容搜索图象的应用程序。这些图象存储在数据库表中(参见图 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); } |