全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3038
推到 Plurk!
推到 Facebook!

希望擷圖的JPG圖檔能在25k到80k之間有什麼方法

答題得分者是:taishyang
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-09-10 14:25:31 IP:220.132.xxx.xxx 訂閱
因為是擷電腦畫面的圖,所以只要看得稍為清楚就好了,有什麼方法能進一步讓我圖檔縮小的呢,我現在電腦是1280*1024,擷出來的bmp是5M多,如果用jpg壓縮率30約100k,壓縮率再低的話字會太模糊,所以想用其它的方式來達成。我曾試用bmp抓時就設定縮圖大小,結果效果不好,我設1024*768的大小也畫質不是很好,大小差蠻多的(可能我使用的方法不對) 而用TmemoryStream可以再壓縮10K~30k。而jpeg的其它參數scale或pixelformat發現好現只能在看圖時候用,存檔都沒辦法如果沒辦法我可能還要再找其它演算法了,jpeg2000不知道有沒有人會使用的。 <textarea class="delphi" rows="10" cols="60" name="code">var dc:hdc; mycanvas:TCanVas; Bmp:TBitmap; Jpg: TJpegImage; CompressedStream: TMemoryStream; begin application.Minimize; application.ProcessMessages; //可能要delay一下,不然抓到空白東東 Jpg := TJpegImage.Create; mycanvas:=TCanvas.Create; Bmp:=tbitmap.Create; CompressedStream := TMemoryStream.Create; dc:=getdc(0); try myCanvas.Handle := DC; Bmp.Width := Screen.Width; Bmp.Height := Screen.Height; //MyBitmap.pixelformat:=pf8bit; Bmp.Canvas.CopyRect(Rect(0,0,Screen.Width,Screen.Height),myCanvas,Rect(0,0,Screen.Width,Screen.Height)); image1.Picture.Bitmap.Assign(Bmp); Bmp.SaveToFile(inttostr(picindex) '.Bmp'); //Jpg.scale:=jshalf; //jpg.Grayscale:=true; Jpg.Assign(Bmp); //Jpg.pixelformat:=jf8bit; Jpg.scale:=jshalf; //Jpg.Scale := TJPEGScale(1); Jpg.Performance:=jpBestQuality; Jpg.CompressionQuality := 30; //你想要的壓縮品質 Jpg.Compress; //<-* //JPG.JPegNeeded; Jpg.SaveToFile(inttostr(picindex) '.jpg'); Jpg.SaveToStream(CompressedStream); CompressBitmap(CompressedStream, clMax); CompressedStream.SaveToFile('j.dat'); picindex := picindex 1; finally releasedc(0,dc); mycanvas.Free; Bmp.Free; Jpg.Free; CompressedStream.free; end; application.Restore; </textarea>
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-09-10 14:59:31 IP:61.220.xxx.xxx 訂閱
TmemoryStream不是拿來控制壓縮品質的, 他只是個Stream, 小弟懷疑是又做了一次jpg壓縮(一般jpg預設壓縮品質好像是80%)
另外可以考慮的是降低顏色數, 或降低解析度
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-09-10 15:34:47 IP:60.250.xxx.xxx 訂閱
降低顏色數 及 降低解析度 不知道有沒有人改的 我改很久 還是改不出來。
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-09-10 15:42:05 IP:122.124.xxx.xxx 未訂閱
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-09-10 15:51:20 IP:61.220.xxx.xxx 訂閱
建議較重要的程式碼要列出, 大家方便貼去測試, 例如
uses JPEG;
picindex : Integer;
另外還有錯誤
[Error] Unit1.pas(74): Undeclared identifier: 'CompressBitmap'
[Error] Unit1.pas(74): Undeclared identifier: 'clMax'

或者方便直接提所有程式碼, 用zip或rar壓縮上傳
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
17kobe
初階會員


發表:86
回覆:73
積分:31
註冊:2007-07-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-09-10 16:08:33 IP:60.250.xxx.xxx 訂閱
使用元件加上:
uses jpeg, ZLib;

忘了加詳細的資料,下次改進
form有一個Tbutton及Timage,TButton的on click貼上最上面程式碼就可以了。

現在主要覺得是如果能設jpg.pixelformat:=jf8bit;或者是jpg.scale:=jshalf;跟jpg.palette就應該可以再縮小,只是改完後存檔都變成0k。
編輯記錄
17kobe 重新編輯於 2007-09-10 16:09:09, 註解 無‧
17kobe 重新編輯於 2007-09-10 16:18:21, 註解 無‧
17kobe 重新編輯於 2007-09-10 16:19:15, 註解 無‧
系統時間:2024-04-25 20:26:44
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!