広告代理店のあるグラフィック・イラストレーターが、クライアントの新しい印刷広告を製作しています。 このイラストレーターは、広告の背景に特定の青で薄い影を入れたいと思い、この代理店で以前に製作した印刷広告でその色が使われたことがあるかどうかを調べようとしています。 そのために、イラストレーターは、内容によって画像を探索するアプリケーションを実行します。 画像は、データベース表に保管されています (図 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); } |