English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

剛剛看到有人提出使用C語言來讀取BMP檔
以前我提這種問題都沒人理我
剛剛的問題有人回答,但是我想讓這問題提出更深入的討論
誰叫我手上有700多種檔案格式的詳細資料跟文獻卻不懂的如何去應用,所以提出這個問題讓大家來討論,讓知識加不在是作業加,偶爾提個有深度的問題來討論看看,請各位專家們提出來說明,點數,我是沒差了,在討論中的學習比點數有價值多了。
如題目,各位大大把你們以前對各種檔案格式的存取,使用技巧,甚至程式碼,提出與大家分享,讓我這個新手學學其他的技巧,有的人說我是假新手,有的人說我是高手,或許吧,我只是一個不夠格的學習者,在此,希望各位專家或是學者們,提出來討論,順便拿走這些點數吧。

2006-12-20 21:16:56 · 1 個解答 · 發問者 永恆的破壞 5 in 電腦與網際網路 程式設計

正是我需要的,可是其他格式如png還有gif我比較喜歡看有程式配理論我比較好看
我之言有c 版的可是不能跑也很難用,改成c又改不出來。
希望大大可以提供一下範例

2006-12-21 07:32:43 · update #1

1 個解答

BMP 2色 256 灰階 和這裡。龍大也 post 過。
我發表過的BMP 24 bits 色被棄置了,難怪你找不到。

#include
#include
int read_bmp(char *filename, unsigned char ***bmp, int *height, int *width)
{ long *hed;
int i, j, k, w;
unsigned char head[1079], mod, *tmp_buf;
FILE *f;
hed = (long *) &head[2];
if ((f = fopen(filename, "rb")) == NULL) return 1;
if (fread(head, 1, 54, f) != 54) return 2;
if (head[0] != 'B' || head[1] != 'M') return 3;
fseek(f, 0, SEEK_END);
if (ftell(f) != hed[0]) return 4;
mod = head[28];
if (mod != 24) return 5;
if (head[30]) return 6;
*width = hed[4], *height = hed[5];
if ((tmp_buf = (unsigned char *) malloc(hed[8])) == NULL)
return 7;
if ( !(*bmp = (unsigned char **)malloc(*height *sizeof(**bmp))))
return 8;
if ( (**bmp = (unsigned char *) malloc(*width*3 * *height + 7)) == NULL)
return 9;
fseek(f, hed[2], SEEK_SET);
if (fread(tmp_buf, 1, (size_t)hed[8]-1, f) != hed[8]-1)
return 10;
for (w=i=0; i<*height; i++, w+=*width*3)
(*bmp)[i] = &(**bmp)[w];
w = *width * 3;
w = (((w-1)>>2) +1) << 2;
for (i=(int)(*height-1); i>=0; i--)
{ k = *height - i -1;
for (j=0; j<*width*3; j++)
(*bmp)[k][j] = tmp_buf[i*w + j];
}
free(tmp_buf);
if (fclose(f)) return 11;
return 0;
}
至於 BMP, JPG, PNG 圖檔規格,網站上很多,搜一下應該都找得到。
GIF 可以試試 這裡,而且是動態的喔!

2006-12-21 03:07:05 補充:
GIF 的壓縮理論有版權!連寫 FreeWare 供人看 GIF 檔都侵權(除非程式師有付版權費)!

這激怒了不少人,因此但生了 PNG。

但 PhotoShop 7.0 (8.0 不知) 的 PNG 檔存檔規格用錯!
造成 PS 存出的 PNG 檔超大!
使得PNG使用者減少!

JPG 和 GIF 是失真壓縮;TIF 和 PNG 是不失真壓縮。
而 PNG 可以是動態,且有透明層(alpha channel),
是很好的規格。

希望有懂 PNG 的大大來分享。

2006-12-21 03:07:57 補充:
GIF 侵權問題〝據說〞一年多前解除了。

2006-12-20 21:59:53 · answer #1 · answered by ? 7 · 0 0

fedest.com, questions and answers