Ubuntsuと、Armadilloを使っています。
画像一覧でページ移動をしたいと思っています。
画像は適当に画面サイズに合う800×480のサイズの名前が0.bmpから11.bmpまで用意しました。
1ぺージに画像は6枚表示します。
実行ファイルがある場所から画像を読み込むのですが、この時、6枚より1枚多くなるたびにページ数を増やしていきたいと考えています。
すみません。なんていえばいいか分かりませんので、
例えば、12枚あり、最初の6枚(1ページ目)を見ている時は、「1/2」
残り7~12枚(2ページ目)を見ている時は「2/2」
と表示したいです。
ここで、
C
1void draw_bmp_small(unsigned int *pfb2, int x0, int y0, int w, int h, unsigned char *bmpdata2) 2{ 3 int x = x - x0; 4 int y = y - y0; 5 int padding = (w * 3) % 4; 6 unsigned char r, g, b; 7 8 // 開始位置から画像を表示 9 // 最も下のラインから始まり、最も上のラインに向かって1ラインずつ画像データを格納 10 for(y = h - 1; y >= 0; y -= 3){ 11 for(x = 0; x < w; x += 3){ 12 // 1pixelから、R,G,B各色のカラーデータを取得 13 r = bmpdata2[x * 3 + y * (w * 3 + padding) + 2]; 14 g = bmpdata2[x * 3 + y * (w * 3 + padding) + 1]; 15 b = bmpdata2[x * 3 + y * (w * 3 + padding) + 0]; 16 // LCDにカラーデータを表示 17 // サイズ260×156 18 pfb2[(h - 1 - (y * 13 / 40 + y0)) * SCREENWIDTH + (x * 13 / 40 + x0)] = RGB888(r, g, b); 19 } 20 } 21}
C
1// 計6枚の画像を読み込む 2 for(y = 1; y >= 0; y--){ 3 for(x = 0; x <= 2; x++){ 4 5 // 文字列filenameに*.bmpを格納 6 sprintf(filename,"%d.bmp", name_new); 7 8 // BTN_PICTUREでタッチされた画像の名前表示(**.bmp) 9 picname[no] = name_new; 10 11 // 引数に設定されたファイルをオープン 12 // オープンに失敗した場合はエラーで終了 13 if ((fd_pic[name_new] = open(filename, O_RDONLY)) < 0) { 14 perror("open(file)"); 15 //return 1; 16 continue; 17 } 18 19 // ビットマップヘッダに、画像データを読み込む 20 // 読み込みに失敗した場合はエラーで終了 21 if (read(fd_pic[name_new], &bmp, sizeof(bmp)) != sizeof(bmp)){ 22 perror("read(file)"); 23 return 1; 24 } 25 26 // 画像データから、ビットマップファイルのヘッダ情報のデータサイズを引いた値を 27 // データサイズとして、メモリ領域を確保 28 datasize = bmp.fh.bfSize - sizeof(bmp); 29 // 必要なメモリ領域を確保できない場合はエラーで終了 30 if (!(bmpdata2 = malloc(datasize))){ 31 perror("malloc"); 32 return 1; 33 } 34 35 // 確保したメモリ領域に画像データを読み込む 36 // 読み込みに失敗した場合はエラーで終了 37 if (read(fd_pic[name_new], bmpdata2, datasize) != datasize){ 38 perror("read(file)"); 39 free(bmpdata2); 40 return 1; 41 } 42 43 //画像ファイルをクローズ 44 close(fd_pic[name_new]); 45 46 // LCDに縮小した画像を表示 47 draw_bmp_small(pfb2, xx[x], yy[y], bmp.ih.biWidth, bmp.ih.biHeight, bmpdata2); 48 49 name_new++; 50 no++; 51 } 52 }
画像を縮小して6枚表示するプログラムの一部です。
画像縮小表示、最初の05.bmpまでの表示はうまくできましたが、次の6枚(611.bmp)を表示しようとページを移動し、「// 計6枚の画像を読み込む」という方を再度実行すると6枚表示するのですが、Segmentation faultになって終了してしまいます。
調べると、確保された領域以外を参照したことによるエラーだと出て、プログラムを見直してみましたがよく分かりませんでした。
このプログラムだけではわからないかもしれませんが、気づいたことがあったら教えてください。
お願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/15 05:41
2016/12/15 05:43