查看單個文章
舊 2009-08-02, 04:43 PM   #6 (permalink)
mini
管理版主
 
mini 的頭像
榮譽勳章
UID - 4144
在線等級: 級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時級別:97 | 在線時長:9810小時 | 升級還需:186小時
註冊日期: 2002-12-07
文章: 13317
精華: 0
現金: 26373 金幣
資產: 3024233 金幣
預設

引用:
作者: chung1206 查看文章
版大您好,如果我只要存成bmp檔就好dpi300這樣會不會比較簡單點?JPG的部份蠻複雜的,我真得看不太懂,謝謝。
根據 http://www.atlaspost.com/landmark-339129.htm 上的 Bitmap File Header
其水平與垂直解析度記載於
0026h H-Resolution 4 水平解析度(單位:像素/公尺)【註8】
002Ah V-Resolution 4 垂直解析度(單位:像素/公尺)
...
語法:
【註8】若要換算為 dpi,則將此欄數值要除以39.37(吋/公尺)
    例如,此欄數值若為 2834 (pixels per meter), 
    則 2834 ÷ 39.37 = 72 (pixels per inch) = 72 dpi
所以改成
語法:
            '**圖像改解析度**
            Dim byteData(&h2B) As Byte

            Open .FileName For Binary Access Read As #1
            Get #1, , byteData()
            Close #1
    
            '將影像解析度改成 150 dpi = 150*39.37 =取整數=> 5906 = 十六進制 17 12
            byteData(&H26) = &H12
            byteData(&H27) = &H17
            byteData(&H2A) = &H12
            byteData(&H2B) = &H17

            Open .FileName For Binary Access Write As #1
            Put #1, , byteData()
            Close #1
            '**************
300 dpi的話是 300*39.37=11811=2E 23

因為電腦讀檔案是以堆疊方式讀出
所以寫入時也就是用倒序方式寫入讀檔
所以要倒過來先填入 &H23 再填 &H2E
byteData(&H26) = &H23
byteData(&H27) = &H2E

此帖於 2009-08-02 04:54 PM 被 mini 編輯.
mini 目前離線  
送花文章: 2007, 收花文章: 7984 篇, 收花: 26785 次
回覆時引用此帖
向 mini 送花的會員:
羅迪 (2009-09-19)
感謝您發表一篇好文章