1

这些天来,我正在使用 ARToolKit,我面临着从静态图像创建 AR Marker 的必要性。因此,正如旧的 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 语言不是很熟悉,所以我在该方法中添加了一些我在网上找到的简单代码,但是当我运行 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 回答