BITMAPがうまく読み込めない – プログラミング – Home

BITMAPがうまく読み込めない
 
通知
すべてクリア

[解決済] BITMAPがうまく読み込めない


link
 link
(@link)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

VC6SPなし OS2000
とりあえずここはC言語だけでかいているのですが教えてください。
//#define XSIZE 624
//#define YSIZE 480
#define XSIZE 1256
#define YSIZE 964

int main(void)
{
int cnt=0;
char *ss=Buff;
char *filename=Buff;

printf(Please Reading Image File Name.... \n);
NAME(filename);
    IMAGE_READ(Image,filename);//<-ここでエラーです。
printf(Image File Read end.[%s] \n\n,filename);
       <略>

}
void IMAGE_READ (unsigned char IMAGE[YSIZE][XSIZE],char *FILENAME)
{
int xa,ya;
unsigned char buffer[YSIZE][XSIZE];
FILE *fp;

if((fp=fopen(FILENAME,rb)) == NULL){
printf(Image Read Error. [%s] \n,FILENAME); exit(1);
}else{
fread(Header,1,1078,fp); fread(buffer,YSIZE,XSIZE,fp);
fclose(fp);
}

}

上記で8BitsBITMAPを読み込んでいます。#define XSIZE 1256、#define YSIZE 964
で行うとSTACK OVERFLOWになります。#define XSIZE 624 #define YSIZE 480ではエラ
ーは起こりません。ただファイルが大きいからOVERFLOWしているのでしょうか?大きくても1MB
ていどなのですが・・・。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

スタックのデフォルトサイズは1MBです。
スタックサイズを大きくするか、
ヒープから確保(mallocなど)するかしてください。


返信引用
ライオン
 ライオン
(@ライオン)
ゲスト
結合: 22年前
投稿: 16
 

通常、スタック上で4096KB以上のデータは宣言しないのが普通。
それ以上のデータを宣言するには、スタック拡張が必要。
普通は、バッファ捕捉等をすると思うけど。
でかいデータをスタックで確保しようとしているのが問題だと思います。

8BitsBITMAPであれば、保存するデータ領域は XSIZE * YSIZE * 8bitになるのでは?


返信引用
ライオン
 ライオン
(@ライオン)
ゲスト
結合: 22年前
投稿: 16
 

あ、かぶったw
デフォルトは1MBでしたか。
VCっていくつなんだろう?とずっと思っていました。(汗)


返信引用
link
 link
(@link)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

>ヒープから確保(mallocなど)するかしてください。
個人的にあまり好きではないので・・・

>スタックサイズを大きくするか、
ヘルプ見たんですが。。。1.5MB程度に変更するにはどうしたらいいのでしょうか?
もう少しヘルプの見方を勉強しなければなりませんね。


返信引用
ライオン
 ライオン
(@ライオン)
ゲスト
結合: 22年前
投稿: 16
 

MSDNのヘルプには「-STACK リンカ オプション」ででているようですね。
あっさり見つかった(爆)
見方の勉強って、なにをするんだろう?(汗)

ところで、ビットマップのサイズは、あの定義でいいんですか?
あの定義なら、白黒ビットオンリー?


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

プロジェクトの設定>[リンク]タブ>カテゴリ[アウトプット]>[スタックアロケーション]
です。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

またも、かぶった(^^

unsigned charは8bitですから、
unsigned char buffer[YSIZE][XSIZE];
で XSIZE * YSIZE * 8bitになってると思いますが。


返信引用
link
 link
(@link)
ゲスト
結合: 22年前
投稿: 3
Topic starter  

>白黒ビットオンリー?
はいそうです。

ヘルプの探し方がなかなかうまくいかないんですよねいつも。

ありがとうございました。解決です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました