[問題] 讀8bit 512*512bmp圖檔

看板C_and_CPP (C/C++)作者 (購購購!)時間16年前 (2009/10/05 19:43), 編輯推噓6(6013)
留言19則, 4人參與, 最新討論串1/1
小弟想把lena的圖片做connect component 寫到後來發現圖片怎樣都會有斜斜奇怪的切線 後來寫一段把圖片分成五層試試看 發現竟然還是有那樣奇怪的切線 這是我讀寫的部份和測試的部份      FILE *fp; FILE *ans; unsigned char image[512][512]; unsigned char cc[512][512]; unsigned char head[172]; unsigned char palette[1024]; unsigned char raw_image[512*512]; int color[256]; //紀錄各灰階有多少pixel int i,j,k; fp = fopen("Lena.bmp", "rb"); // 讀 bmp 灰階標頭檔 fread(head, 172, 1, fp); fread(palette, 1024, 1, fp); // 讀 bmp 影像資料 fread(raw_image, 512*512, 1, fp); k=0; for (i=0; i< 512; i++) { for (j=0; j< 512; j++) { image[i][j] = raw_image[k]; k++; }} //讀到二維陣列 for(i=0;i<512;i++){ for (j=0; j< 512; j++) { if(i<100) image[i][j]=50; else if(100<i&&i<200) image[i][j]=100; else if(200<i&&i<300) image[i][j]=150; else if(300<i&&i<400) image[i][j]=200; else image[i][j]=250; } }                //test 把圖片分成五層 k=0; for (i=0; i< 512; i++) { for (j=0; j< 512; j++) { raw_image[k]=image[i][j]; k++; } } //寫回raw ans = fopen("Lena_after.bmp","wb"); fwrite(head, 1, 172, ans); fwrite(palette,1, 1024, ans); fwrite(raw_image,1,512*512,ans); 他的左下角有一小塊平行的線好像沒讀到一樣有怪怪的顏色 還有中間左邊有一條垂直的奇怪切線 請問是我讀檔byte算錯或是怎樣的問題嗎:( 希望有高手能解答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.251.43

10/05 20:12, , 1F
個人推測, 你是不是忘了處理8bpp的調色盤了?? 8bpp的BMP
10/05 20:12, 1F

10/05 20:13, , 2F
在raw data前有一段是color table, raw data裡記錄的則
10/05 20:13, 2F

10/05 20:13, , 3F
是color index, 也就是說8bpp的BMP裡的raw data不是灰階
10/05 20:13, 3F

10/05 20:14, , 4F
值, 而是索引值; 你的灰階lena可能只是剛好index對應成
10/05 20:14, 4F

10/05 20:14, , 5F
灰階值而已:)
10/05 20:14, 5F

10/05 20:15, , 6F
也因為最前面少處理掉一個固定大小的調色盤, 所以後面全
10/05 20:15, 6F

10/05 20:15, , 7F
部scanline都shift了同樣的大小; 至於調色盤的位置與它
10/05 20:15, 7F

10/05 20:15, , 8F
的layout, 請自己Wiki/google一下吧XD
10/05 20:15, 8F

10/05 20:18, , 9F
糟糕, 我看到code有處理pallete了, 看來是猜錯了(逃Orz)
10/05 20:18, 9F

10/05 20:22, , 10F
BMP的檔頭有172 bytes這麼多嗎?_?
10/05 20:22, 10F

10/05 20:22, , 11F
嗯嗯我也是在想是不是調色盤或是head算錯...
10/05 20:22, 11F

10/05 20:24, , 12F
對耶bmp54而已... 172是老師給的另種格式...感謝感謝ˊˋ
10/05 20:24, 12F

10/05 20:24, , 13F
我剛查Wiki, BMP兩部份檔頭加起來只有54 bytes啊?_?
10/05 20:24, 13F

10/05 20:35, , 14F
這...connected component不是長這樣吧= =
10/05 20:35, 14F

10/05 21:30, , 15F
他還只有讀檔吧, 檔頭算錯了所以光讀檔寫出結果就不對;
10/05 21:30, 15F

10/05 21:30, , 16F
connected component應該是接著才要嘗試去做吧@_@"
10/05 21:30, 16F

10/05 22:08, , 17F
每個row都要是4的倍數 不夠請補齊
10/05 22:08, 17F
※ 編輯: relaxpl 來自: 140.112.251.43 (10/05 22:15)

10/05 22:21, , 18F
可是照說Width是512, 一pixel 1 byte, 應該是不用
10/05 22:21, 18F

10/05 22:21, , 19F
padding的啊?_?
10/05 22:21, 19F
文章代碼(AID): #1AoTlRF7 (C_and_CPP)
文章代碼(AID): #1AoTlRF7 (C_and_CPP)