[問題] bmp 縮放後顏色改變問題

作者: benny5566 (Ynneb)   2023-10-08 01:51:06
開發平台(Platform): (Ex: Win10, Linux, ...)
Win10 VS code
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
Gcc
問題(Question):
C語言 bmp檔縮小後顏色改變問題
說明(Supplement):
我現在要將一張24位元的bmp檔使用bilinear縮小1.5倍,一開始失敗,且連檔案都無法開啟
,後來才知道bmp檔每一個row的bytes數量必須是4的倍數。
看了一些教學後,我將縮小後的圖片每一個row後面補0,以滿足4的倍數,也成功將圖片開
啟了,且縮小尺寸是對的,但現在問題是我圖片的整張顏色變得不一樣了,一直找不出問題
,想請問各位大大知道問題在哪嗎?謝謝!
程式碼: http://ideone.com/JFqQZu
作者: benny5566 (Ynneb)   2023-10-08 02:01:00
補充:其他張沒有padding問題的圖片顏色都正常
作者: LPH66 (-6.2598534e+18f)   2023-10-08 03:58:00
[公告] 發文附上程式碼較易獲得協助
作者: stupid0319 (徵女友)   2023-10-08 21:36:00
187行很怪,應該是每一個小圖像數的forloop而不是原圖像數的forloop看錯了,拍謝,顏色改變應該是計算問題
作者: benny5566 (Ynneb)   2023-10-08 22:02:00
大大的意思是bilinear會有問題嗎?
作者: stupid0319 (徵女友)   2023-10-08 22:26:00
yrgb怎麼會相加相乗坐標系的值,看不太懂d1,d2,d3,d4隨i,j變化而變化?邏輯不是很理解問了一下ChatGPT,原PO好像沒有錯XD
作者: LPH66 (-6.2598534e+18f)   2023-10-09 04:52:00
我還沒細看, 不過我將一個小畫家畫的 24x24 24 位元 bmp餵入這支程式, 它會對每個輸入圖產生兩個 270 byte 大小的檔案 -- 這一點顯然不對, 因為原圖有 1782 byte 大小而你的程式至少其中一部份是將其放大由小畫家存的 bmp 檔大小, 16x16 24 位元應有 822 byte36x36 24 位元應有 3942 byte這裡我甚至還沒去看你的縮放計算 (因為根本看不到結果)這裡就給一個建議: 輸入的 bmp 格式很容易用小畫家畫一個所以你就隨便存一個去測試你的程式相關的東西到底對不對
作者: wulouise (在線上!=在電腦前)   2023-10-09 10:08:00
我怎記得windows gdiplus支援放大縮小,確定要重造輪子?
作者: benny5566 (Ynneb)   2023-10-09 13:38:00
了解,謝謝前輩回答,我再試看看
作者: yvb   2023-10-10 09:00:00
小畫家做的圖會填image_size,所以原PO程式會走到有問題的76行但有的程式不填image_size,推測原PO的原圖沒有padding問題.如果原圖就有padding問題,那讀檔時pixels對應就錯亂了...然後145行在i為0時就先填了padding?呃, 我上面的第一句是要回LPH66大的.然後原PO的原圖很可能是未填image_size(值為0).

Links booklink

Contact Us: admin [ a t ] ucptt.com