希望擷圖的JPG圖檔能在25k到80k之間有什麼方法 |
答題得分者是:taishyang
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
因為是擷電腦畫面的圖,所以只要看得稍為清楚就好了,有什麼方法能進一步讓我圖檔縮小的呢,我現在電腦是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 發送簡訊給我 |
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
我以前有用過JPEG2000的元件
http://delphi.ktop.com.tw/board.php?cid=31&fid=77&tid=26565 |
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
建議較重要的程式碼要列出, 大家方便貼去測試, 例如
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 發送簡訊給我 |
使用元件加上:
uses jpeg, ZLib; 忘了加詳細的資料,下次改進 form有一個Tbutton及Timage,TButton的on click貼上最上面程式碼就可以了。 現在主要覺得是如果能設jpg.pixelformat:=jf8bit;或者是jpg.scale:=jshalf;跟jpg.palette就應該可以再縮小,只是改完後存檔都變成0k。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |