VB6.0載入圖片解析度限制
各位先進們好,想請教一下,我載入圖片至Image裡後存檔成jpg後,我的原圖解析度是300另存jpg檔後解析度變成70而且可以做一般瀏覽而已,無法使用photoshop開啟,但若存成bmp檔photoshop可以開啟,但解析度依然只有70而已,請問可以限制他載入的解析度大小嗎?謝謝。
|
不知道你的 jpg存檔函式(如何存檔的程式碼)是...?
DPI 是 像素/英吋 只是一個記錄於 jpg檔之檔頭上的資訊 要改變的話 只要將檔頭資訊取出,改變 XResolution、YResolution 兩個參數的值,再寫回檔頭便可以了 可以用二進位開檔方式將資訊取出 改寫後再寫回 檔案是以 十六進制 方式記載 位址在 第14+15位元組 及 第16+17位元組 上 比如 水平及垂直解析度都是96 dpi的話就是 第十四位元組 --> 00 60 00 60 <--第十七位元組 語法:
Private Sub Command3_Click() |
我的存檔程式碼如下,請版大多多指教,謝謝。
語法:
Private Sub Command3_Click() |
改成
語法:
Dim sTmp As String |
版大您好,如果我只要存成bmp檔就好dpi300這樣會不會比較簡單點?JPG的部份蠻複雜的,我真得看不太懂,謝謝。
|
引用:
其水平與垂直解析度記載於 0026h H-Resolution 4 水平解析度(單位:像素/公尺)【註8】 002Ah V-Resolution 4 垂直解析度(單位:像素/公尺) ... 語法:
【註8】若要換算為 dpi,則將此欄數值要除以39.37(吋/公尺) 語法:
'**圖像改解析度** 因為電腦讀檔案是以堆疊方式讀出 所以寫入時也就是用倒序方式寫入讀檔 所以要倒過來先填入 &H23 再填 &H2E byteData(&H26) = &H23 byteData(&H27) = &H2E |
感謝版大,我發現我錯了,我發現它一載入圖片時解析度就變成72,而不是存檔後才改變的,這樣我是不是要在開啟圖檔那就要改了?謝謝。
|
引用:
|
引用:
謝謝。 |
那要處理的圖檔也不須附上...
|
引用:
|
引用:
PS:按另存圖檔後會出現不正確的引用,在這行Open .FileName For Binary Access Read As #1 |
加了個 ChangeFileDPI 副程式
及改良 Command2_Click() 不過你那個存檔方式還是只能存成 BMP格式 (只是改個副檔名成 .jpg實際上是掩耳盜鈴 ...) 語法:
Private Sub Command2_Click() 而不是固定用 300等固定值 |
感謝版大小弟受益良多,因為之前有使用過Photoshop在Photoshop裡更改DPI的話像素也會跟著改變,但沒想到在程式裡卻不會,斗膽再請教如果更改像素的話會不會比較好?因為我用您的程式複製進去,DPI確實變成300了,但實際像素卻沒改變,謝謝。:em03:
|
引用:
這張圖要印出的解析度 如果 DPI大於 像素值 那這個 DPI就沒意義 所以 DPI不能大於像素值 比如 某張圖其 寬=150像素 而 DPI裡的 水平解析度 卻是 300 那像 Photoshop這種智慧專業軟體 就會做出調整 你的程式應該根據要列印的長寬 而倒過來算出 最佳DPI才對 而不是活生生硬著頭皮規定 DPI |
引用:
感謝版大分享此觀念,那我若想更動像素的話,只需要將sDPI的部份改成pixels就可以了嗎?還是整個語法要重寫?謝謝。 PS:我用另一個方式問,有沒有辦法讓它載入後不改變像素的方式?因為我第一次做的時候是沒問題的,但當時有個問題是 原本一張5M多的檔案載入合併後存檔變成40幾M,後來一直詢問改良變成這樣,但已經忘了那時候到底是什麼方式使它不會 改變原本的像素,謝謝。 |
BMP 為未壓縮圖檔
所以一張是 5MB的話 八張就等於5*8=40MB 其實可以用兩種算式來自動換算 DPI ChangeFileDPI .FileName, (Picture1.ScaleWidth / 5.516) / 15 '因為1 Pixels = 15 Twip 或 ChangeFileDPI .FileName, (Picture1.ScaleHeight / 3.546) / 15 '因為1 Pixels = 15 Twip 原理: 兩吋大頭照: 3.5cm*4.5cm = 1.379in*1.773in (1cm = 0.394in) 並連四張*串連兩張 兩吋照 = 5.516in*3.546in 如果 Picture1.ScaleMode = 3(Pixels) 5.516in=Picture1.ScaleWidth /iDPI 3.546in=Picture1.ScaleHeight /iDPI 假設 水平dpi = 垂直dpi iDPI = Picture1.ScaleWidth / 5.516 = Picture1.ScaleHeight / 3.546 所以 正確的方法是先調整你的 image 之Width、Height 使他長寬比更接近 4.5/3.5 之比例 並將 image間的空隙 保留出來 因為洗出來時要有裁切的保留空間 還有一點 當 Picture1.ScaleMode = 1(Twip) Picture1.Appearance = 0(平面) 時 Picture1.ScaleWidth 與 Picture1.Width 數值是相同的 如果 Picture1.Appearance = 1(立體) Picture1.Width 會比 Picture1.ScaleWidth 多出一些 所以 你的程式 Picture1.Width = Image1(0).Width * 4 Picture1.Height = Image1(0).Height * 2 應該改成 Picture1.Width = Image1(0).Width * 4 + (Picture1.Width - Picture1.ScaleWidth) '+ 一點空隙 Picture1.Height = Image1(0).Height * 2 + (Picture1.Height - Picture1.ScaleHeight) '+ 一點空隙 所以幫你大概改了些 (image的長、寬 及一些程式碼修飾) http://touch.moehome.jp/up_ssize/dow...901.rar/attach 按下網頁的 按鈕(旁邊填 mini)即可下載 |
引用:
|
所有時間均為台北時間。現在的時間是 03:50 AM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *