C言語でBMP画像を読み込み、matlabで処理するDLLに引き渡して処理をしたい時、画像の渡すにはどうすればよいのですか?
Show older comments
mxArray *in4
unsigned char *inputimage;
unsigned char BitMapFileHeader[14];//BMPのファイルヘッダーを保存する
unsigned int biSize;//BMPのサイズを保存する
int biWidth;//BMPの幅を保存する
int biHeight;//BMPの高さを保存する
unsigned char BitMapInfoHeader[28];//上記3つ以外のBMPの情報ヘッダーを保存する
int i,j,c;//for文用
FILE *fp;//ファイルポインタ
int dims[3];
fp = fopen("~//example.bmp","rb");
fread(&BitMapFileHeader, sizeof(unsigned char),14,fp);//ファイルヘッダーを読み込む
fread(&biSize, sizeof(int),1,fp);//情報ヘッダーにあるサイズを読み込む
fread(&biWidth,sizeof(int),1,fp);//情報ヘッダーにある幅を保存
fread(&biHeight,sizeof(int),1,fp);//情報ヘッダーにある高さを保存
fread(&BitMapInfoHeader,sizeof(unsigned char),28,fp);//残りの情報ヘッダーを保存
dims[0] = biHeight;
dims[1] = biWidth;
dims[2] = 3;
inputimage = (unsigned char*)mxMalloc(sizeof(const char*)*biHeight*biWidth*3);
for(i = 0; i<biHeight;i++){//0から幅まで
for(j = 0;j<biWidth; j++){//0から高さまで
for(c=0;c<3;c++){//RGBのそれぞれ
fread((inputimage+i*biWidth*3+j*3+c),sizeof(unsigned char),1,fp);//画素の情報を読み込んで保存する
}
}
}
fclose(fp);
in4 = mxCreateNumericArray(3, (const mwSize*)dims, mxUINT8_CLASS,0);
memcpy(mxGetChars(in4), inputimage, sizeof(unsigned char)*biWidth*biHeight*3);//Run time error Access violation
mlfDllexample(1, &out, in4);//in4で画像を渡し、outで画像を返す。
2 Comments
Kojiro Saito
on 24 Jan 2022
質問内容についてクリアにさせてください。上記のコードで迷われているのはCでのoutの定義のしかたについてでしょうか?
悠貴 大森
on 26 Jan 2022
Accepted Answer
More Answers (0)
Categories
Find more on MATLAB Compiler SDK のトラブルシューティング in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!