IBM Books

Image, Audio, Video Extender °ü¸® ¹× ÇÁ·Î±×·¡¹Ö

QBIC Á¶È¸ »ùÇà ÇÁ·Î±×·¥

´ÙÀ½ ±×¸²Àº QBIC Á¶È¸¸¦ ºôµåÇÏ°í ½ÇÇàÇÏ´Â C·Î ÄÚµùµÈ ÇÁ·Î±×·¥ÀÇ ÀϺκÐÀ» º¸¿©ÁÝ´Ï´Ù. ±×¸²¿¡ ÀÖ´Â ÄÚµå´Â Æò±Õ »ö»ó¿¡ ÀÇÇÑ À̹ÌÁö Á¶È¸ÀÔ´Ï´Ù. À̰ÍÀº »ö»óÀ̳ª À̹ÌÁö ÆÄÀÏ À̸§À» ÀÔ·ÂÇϵµ·Ï ÇÁ·ÒÇÁÆ®ÇÕ´Ï´Ù. »ç¿ëÀÚ´Â ¶ÇÇÑ ÈÄ¼Ó Á¶È¸¿ë ¿¹½Ã À̹ÌÁö·Î Á¶È¸¿¡¼­ ¸®ÅÏÇÏ´Â À̹ÌÁö¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·± ´ÙÀ½ ÇÁ·Î±×·¥Àº À̹ÌÁö Ä÷³À» Á¶È¸Çϱâ À§ÇØ Æò±Õ »ö»óÀ¸·Î¼­ À̸§ ÁöÁ¤µÈ »ö»óÀ̳ª À̹ÌÁö »ö»óÀ» »ç¿ëÇÕ´Ï´Ù.

SAMPLES ¼­ºêµð·ºÅ丮¿¡ ÀÖ´Â QBICDEMO.C ÆÄÀÏ¿¡¼­ ¿ÏÀüÇÑ ÇÁ·Î±×·¥À» ãÀ» ¼ö ÀÖ½À´Ï´Ù. ¿ÏÀüÇÑ ÇÁ·Î±×·¥Àº Æò±Õ »ö»ó»Ó ¾Æ´Ï¶ó È÷½ºÅä±×·¥À̳ª À§Ä¡ »ö»óÀ¸·Î À̹ÌÁö¸¦ Á¶È¸ÇÏ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù. ¿ÏÀüÇÑ ÇÁ·Î±×·¥À» ¼öÇàÇÏ·Á¸é, ENABLE, POPULATE ¹× QBCATDMO »ùÇà ÇÁ·Î±×·¥À» ¼öÇàÇØ¾ß ÇÕ´Ï´Ù(SAMPLES ¼­ºêµð·ºÅ丮¿¡µµ ÀÖÀ½). »ùÇà ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â ºÎ·Ï B, »ùÇà ÇÁ·Î±×·¥ ¹× ¹Ìµð¾î ÆÄÀÏÀ» ÂüÁ¶ÇϽʽÿÀ.

»ùÇà ÇÁ·Î±×·¥¿¡¼­ ´ÙÀ½ »çÇ׿¡ À¯ÀÇÇϽʽÿÀ.

(1)dmbqbapi Çì´õ ÆÄÀÏ Æ÷ÇÔ.

(2)µ¥ÀÌÅͺ£À̽º Á¤º¸¿ë »ç¿ëÀÚ¸¦ ÇÁ·ÒÇÁÆ®.

(3)µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°á.

(4)Á¶È¸ ¿ÀºêÁ§Æ® ÀÛ¼º.

(5)Á¶È¸ ¿ÀºêÁ§Æ®¿¡ Ư¼ºÀ» Ãß°¡.

(6)ÀÔ·Â À¯Çü¿¡ ´ëÇØ »ç¿ëÀÚ¸¦ ÇÁ·ÒÇÁÆ®(»ö»ó À̸§, À̹ÌÁö ÆÄÀÏ ¶Ç´Â ÀÌ¹Ì °Ë»öµÈ À̹ÌÁö).

(7)Ư¼º¿ë µ¥ÀÌÅÍ ¼Ò½º ÁöÁ¤. µ¥ÀÌÅÍ ¼Ò½º´Â Æò±Õ »ö»ó¿¡ ´ëÇÑ ¸í½ÃÀûÀÎ ½ºÆåÀÔ´Ï´Ù.

(8)Á¶È¸ ¹ßÇà. Image Extender´Â À̹ÌÁöÀÇ Àüü Ä÷³À» Ž»öÇÕ´Ï´Ù. À̰ÍÀº ¸®ÅÏµÈ À̹ÌÁöÀÇ ÃÖ´ë ¼ö·Î 10À» ÁöÁ¤Çϱ⵵ ÇÕ´Ï´Ù.

(9)¸®ÅÏµÈ À̹ÌÁö ¼³Á¤¿¡ ´ÙÀ½ À̹ÌÁö¸¦ Ç¥½Ã. À̹ÌÁö Ç¥½Ã¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ Á¤º¸´Â Àüü Å©±â À̹ÌÁö ¶Ç´Â ºñµð¿À ÇÁ·¹ÀÓ Ç¥½Ã¸¦ ÂüÁ¶ÇϽʽÿÀ.

(10)Á¶È¸ ¿ÀºêÁ§Æ® »èÁ¦.

SAMPLES ¼­ºêµð·ºÅ丮´Â QBIC Á¶È¸¸¦ ºôµåÇÏ°í »ç¿ëÇÏ´Â ¹æ¹ýÀ» ¿¹ÁõÇÏ´Â ¶Ç ´Ù¸¥ ÇÁ·Î±×·¥À» Æ÷ÇÔÇÕ´Ï´Ù. ÇÁ·Î±×·¥ QbicQry.java´Â QBIC Á¶È¸¿¡ ´ëÇÑ °Ë»ö ±âÁØÀ» ±×·¡ÇÈÀ¸·Î ÁöÁ¤ÇÏ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î±×·¥Àº Æò±Õ »ö»óÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï »ö»ó ¼±Åñ⸦ Á¦°øÇÕ´Ï´Ù. ÇÁ·Î±×·¥Àº ¼±ÅûçÇ×À» Á¶È¸ ¹®ÀÚ¿­·Î º¯È¯½Ãŵ´Ï´Ù.

±×¸² 21. QBIC Á¶È¸ »ùÇà ÇÁ·Î±×·¥

#include <sql.h>
#include <sqlcli.h>
#include <sqlcli1.h>
#include <dmbqbqpi.h> (1)
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <color.h>
#include <ctype.h>
 
#define   MaxQueryReturns        10
 
#define   MaxDatabaseNameLength  SQL_SH_IDENT
#define   MaxUserIdLength        SQL_SH_IDENT
#define   MaxPasswordLength      SQL_SH_IDENT
#define   MaxTableNameLength     SQL_LG_IDENT
#define   MaxColumnNameLength    SQL_LG_IDENT
 
static  char       databaseName[MaxDatabaseNameLength+1];
static  char       userid[MaxUserIdLength+1];
static  char       password[MaxPasswordLength+1];
 
static  char       tableName[MaxTableNameLength+1];
static  char       columnName[MaxColumnNameLength+1];
 
static  char       line[4000];
 
static  QbResult   results[MaxQueryReturns];
static  long       currentImage   = -1;
static  long       imageCount  = 0;
 
static  char*      tableAndColumn;
 
static  QbQueryHandle   averageHandle = 0;
static  QbQueryHandle   histogramHandle = 0;
static  QbQueryHandle   drawHandle = 0;
static  QbQueryHandle   lastHandle = 0;
 
static  SQLHENV    henv;
static  SQLHDBC    hdbc;
static  SQLHSTMT   hstmt;
static  SQLRETURN  rc;
 
static  char*    listQueries =
        "SELECT NAME,DESCRIPTION FROM MMDBSYS.QBICQUERIES ORDER BY NAME";
 
static  char*    menu[] = {
/*
 12345678901234567890123456789012345678901234567890123456789012345678901234567890 */
"",
"+-----------------------------------------------------------------------------+",
"| AVERAGE COLOR colorname                                                     |",
"| AVERAGE FILE filename format                                                |",
"| AVERAGE LAST                                                                |",
"| Press Enter to display the next image in the series                         |",
"+-----------------------------------------------------------------------------+",
"",
0
};
 
static  char*       help[] = {
"",
"AVERAGE     Execute an average color query",
"  COLOR       Specifies the color to query for",
"  FILE        Specifies the file to compute the average color from",
"  LAST        Specifies the last displayed image be used to compute the color",
"  NEXT        Displays the next image from the current query or nothing if",
"                all of the image have been displayed."
"",
">>pause<<",
0
};
/******************************************************************************/
/* doNext()                                                                   */
/******************************************************************************/
static void doNext(void)
{
        int ret;
   if (currentImage < imageCount)
      currentImage++;
   if (currentImage < imageCount)
      ret = DBiBrowse("/usr/local/bin/xv %s", MMDB_PLAY_HANDLE,
            results[currentImage].imageHandle, MMDB_PLAY_NO_WAIT); (9)
}
 
/******************************************************************************/
/* doAverage()                                                                */
/******************************************************************************/
static void doAverage(void)
{
   QbQueryHandle qohandle = 0; QbImageSource is; char* type;
   char* arg1; char* arg2;
 
   type = nextWord(0);
   if (abbrev(type, "color", 1)) {
      is.type = qbiSource_AverageColor;
      arg1 = nextWord(0);
      if (arg1 == 0) {
         printf("AVERAGE COLOR command requires a colorname argument.\n");
         return;
      }
      if (getColor(arg1, &is.averageColor) == 0) {
         printf("The colorname entered was not recognized.\n");
         return;
      }
   }
   else if (abbrev(type, "file", 1)) {
      is.type = qbiSource_ClientFile;
      arg1 = nextWord(0);
      if (arg1 == 0) {
         printf("AVERAGE FILE command requires a filename argument.\n");
         return;
      }
      arg2 = nextWord(0);
      if (arg2 == 0) {
         printf("AVERAGE FILE command requires a file format argument.\n");
         return;
      }
      strcpy(is.clientFile.fileName, arg1);
      strcpy(is.clientFile.format, arg2);
   }
   else if (abbrev(type, "last", 1)) {
      is.type = qbiSource_ImageHandle;
      if (0 <= currentImage &&; currentImage < imageCount)
         strcpy(is.imageHandle, results[currentImage]imageHandle);
      else {
         printf("No last image for AVERAGE LAST command\n");
         return;
      }
   }
   else {
      printf("AVERAGE command only supports COLOR, FILE, and LAST types.\n");
      return;
   }
 
   _QbQuerySetFeatureData(averageHandle, "QbColorFeatureClass", &is); (7)
   _QbQuerySearch(averageHandle, tableAndColumn, "IMAGE",
         MaxQueryReturns, 0, 0, &imageCount, results); (8)
   lastHandle = averageHandle;
 
   currentImage = -1;
}
/******************************************************************************/
/* commandLoop()                                                              */
/******************************************************************************/
void commandLoop(void)
{
   int  done = 0;
 
   while (!done) { (6)
      displayText(menu);
      printf("%d", currentImage + 1);
      if (0 <= currentImage &&; currentImage < imageCount)
            printf("  %8.6f", results[currentImage].score);
      printf("> ");
      gets(line);
      done = processCommand(line);
   }
}
 
/******************************************************************************/
/* main()                                                                     */
/******************************************************************************/
void main(void)
{
   char*                inst;
   int          i;
 
   printf("\n\n");
   printf("Please enter: database_name [user_id] [password] "\n"); (2)
   gets(line);
   if (copyWord(line, databaseName, sizeof(databaseName)) == 0)
      exit(0);
   copyWord(0, userid, sizeof(userid));
   copyWord(0, password, sizeof(password));
   printf("\n");
 
   if (SQLAllocEnv(&henv) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
   if (SQLAllocConnect(henv, &hdbc) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
   if (SQLConnect(hdbc, (3)
                  (SQLCHAR*)databaseName,
                  SQL_NTS,
                  (SQLCHAR*)userid,
                  SQL_NTS,
                  (SQLCHAR*)password,
                  SQL_NTS) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
 
   printf("Initializing . . .\n");
 
   inst = getenv("DB2INSTANCE");
   if (inst != 0 &&; strcmp(inst, "keeseyt") == 0)
      tableAndColumn = "KEESEY.TEST";
   else
      tableAndColumn = "QBICDEMO.TEST";
 
   _QbQueryCreate(&averageHandle); (4)
   _QbQueryAddFeature(averageHandle, "QbColorFeatureClass");
   _QbQueryCreate(&histogramHandle);
   _QbQueryAddFeature(histogramHandle, "QbColorHistogramFeatureClass");
   _QbQueryCreate(&drawHandle);
   _QbQueryAddFeature(drawHandle, "QbDrawFeatureClass"); (5)
 
   commandLoop();
 
   _QbQueryDelete(drawHandle);
   _QbQueryDelete(histogramHandle); (10)
   _QbQueryDelete(averageHandle);
 
   if (SQLDisconnect(hdbc) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
   if (SQLFreeConnect(hdbc) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
   if (SQLFreeEnv(henv) != SQL_SUCCESS)
      sqlError(SQL_NULL_HSTMT);
}

 


[ ÆäÀÌÁöÀÇ ¸Ç À§ | ÀÌÀü ÆäÀÌÁö | ´ÙÀ½ ÆäÀÌÁö | ¸ñÂ÷ | »öÀÎ ]