1

最近、私は ARToolKit を使用していて、静止画像から AR マーカーを作成する必要性に直面しています。そこで、古い ARToolKit のニュースレターで提案されているように、mk_patt.exe を実行するときに標準の Win32DirectShow 関数を置き換える独自のビデオ関数を書き始めました。私のビデオ機能には次の構造があります:

int arVideoOpen( char *config ) {
    return 0;
}

int  arVideoClose( void ){
    return 0;
}

int arVideoDispOption( void ){
    return 0;
}    

int arVideoInqSize( int *x, int *y ){
    *x = xsize; 
    *y = ysize; 
}

ARUint8 *arVideoGetImage( void )
{
    FILE *pFile;
unsigned long Size;
unsigned char *buffer;
size_t result;

    pFile = fopen("hhgf.bmp","rb");
    if(pFile==0){
        printf("Error!\n");
    }
    else{
        fseek(pFile, 0, SEEK_END);
        Size = ftell( pFile );
        printf("Size: %d \n",Size);
        fseek(pFile, 0, SEEK_SET);
        buffer = (unsigned char*) malloc (Size);
        if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}
            result = fread (buffer, Size,1, pFile);
        if (result != Size) {fputs ("Reading error",stderr); }
        return (ARUint8 *) buffer;
    }
}

int arVideoCapStart( void ){
    return 0;
}

int arVideoCapStop( void ) {
    return 0;
}

int arVideoCapNext( void )
{
    return 0;
}

焦点メソッドはarVideoGetImageで、私の画像のデータを返すことになっています。私は C の専門家ではないので、Web で見つけたいくつかの簡単なコードをメソッドに入れましたが、mk_patt.exe を実行するとクラッシュします。これをコーディングする方法、またはこれが私の目的を達成するための正しい方法であるかどうかについて、助けが必要です。

4

1 に答える 1

1

私はこのように解決しました

ARUint8 *getBack(){
    int i;  
    unsigned char *buffer;
    int Size;
    FILE *streamIn;
    int byte;
    int count = 0;
    //printf("What wath %d \n",AR_DEFAULT_PIXEL_FORMAT);
    if(!isDef){
        image = (int *) malloc(400*400*sizeof(int));
         streamIn = fopen("hhgf.bmp", "rb");

            fseek( streamIn, 0, SEEK_END);
            Size = ftell(  streamIn );
            fseek( streamIn, 0, SEEK_SET);

         if (streamIn == (FILE *)0){
           printf("File opening error ocurred. Exiting program.\n");
           exit(0);
         }


        for(i=0;i<(Size-(400*400));i++) byte= getc(streamIn);
        i=0;
        while((count=getc(streamIn))!=-1){
            image[i]=count;
            i++;
        }

        fclose(streamIn);

        isDef=true;
    }

    return (ARUint8 *)image;
}


ARUint8   *arVideoGetImage( void ){
            return getBack();
 }
于 2012-08-15T22:09:07.783 に答える