為什麼jpg檔會變成0K |
答題得分者是:hagar
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
<textarea class="delphi" rows="10" cols="60" name="code"> Jpg := TJpegImage.Create;
mycanvas:=TCanvas.Create;
mybitmap:=tbitmap.Create;
dc:=getdc(0);
try
myCanvas.Handle := DC;
with Screen do
begin
MyBitmap.Width := Width;
MyBitmap.Height := Height;
MyBitmap.Canvas.CopyRect(Rect(0,0,Width,Height),myCanvas,Rect(0,0,Width,Height));
image1.Picture.Bitmap.Assign(mybitmap);
MyBitmap.SaveToFile(inttostr(picindex) '.Bmp'); //jpg.scale:=jsfullsize;
Jpg.Assign(mybitmap);
Jpg.Performance:=jpBestQuality;
Jpg.pixelformat:=jf24bit;
Jpg.CompressionQuality := 30; //你想要的壓縮品質
Jpg.Compress; //<-*
Jpg.SaveToFile(inttostr(picindex) '.jpg');
end;
</textarea> 我改成 Jpg.pixelformat:=jf8bit;就存成0bit蠻奇怪的,好像參數不行的感覺
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
實際測試, 來源必須是 8 bit ( 256 色) 圖片 or 畫面才能用該參數
<textarea class="delphi" rows="10" cols="60" name="code">procedure TForm1.FormCreate(Sender: TObject); var Jpg : TJPEGImage; mycanvas : TCanvas; mybitmap : TBitmap; dc : HDC; i:Integer; begin Jpg := TJpegImage.Create; mycanvas:=TCanvas.Create; mybitmap:=tbitmap.Create; dc:=getdc(0); try myCanvas.Handle := DC; with Screen do i:=0; begin MyBitmap.Width := Width; MyBitmap.Height := Height; MyBitmap.Canvas.CopyRect(Rect(0,0,Width,Height),myCanvas,Rect(0,0,Width,Height)); image1.Picture.Bitmap.Assign(mybitmap); // MyBitmap.SaveToFile(inttostr(picindex) '.Bmp'); // MyBitmap.SaveToFile('C:\' IntToStr(i) '.Bmp'); MyBitmap.SaveToFile('C:\256.Bmp'); // 8 bit color //jpg.scale:=jsfullsize; Jpg.Assign(mybitmap); Jpg.Performance:=jpBestQuality; // Jpg.pixelformat:=jf24bit; Jpg.pixelformat:=jf8bit; Jpg.CompressionQuality := 30; //你想要的壓縮品質 Jpg.Compress; //<-* // Jpg.SaveToFile(inttostr(picindex) '.jpg'); Jpg.SaveToFile('C:\' IntToStr(i) '.jpg'); i:=i 1; end; Finally end; end;</textarea>
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案! 子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問! |
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
<textarea class="delphi" rows="10" cols="60" name="code"> application.Minimize;
application.ProcessMessages;
//可能要delay一下,不然抓到空白東東
Jpg := TJpegImage.Create;
mycanvas:=TCanvas.Create;
mybitmap:=tbitmap.Create;
dc:=getdc(0);
try
myCanvas.Handle := DC;
with Screen do
begin
MyBitmap.Width := Width;
MyBitmap.Height := Height;
MyBitmap.Canvas.CopyRect(Rect(0,0,Width,Height),myCanvas,Rect(0,0,Width,Height));
MyBitmap.pixelformat:=pf8bit;
image1.Picture.Bitmap.Assign(mybitmap);
MyBitmap.SaveToFile(inttostr(picindex) '.Bmp'); Jpg.Assign(mybitmap);
Jpg.pixelformat:=jf8bit;
Jpg.Performance:=jpBestQuality;
Jpg.CompressionQuality := 30; //你想要的壓縮品質
Jpg.Compress; //<-*
Jpg.SaveToFile(inttostr(picindex) '.jpg');
end;
</textarea> 再請問一下,前面參數要如何來改才能有256色,我改這樣,結果後面有加Jpg.pixelformat:=jf8bit;這一行就存成0k,若沒加這一行結果跑可以,但是存的大小都差不多。好像聽說jpg都是用16bit來存不知道怎麼樣來改才對。
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
那就奇怪了
小弟試的結果是 jpg 檔的 Size 不會是 0 而且更改 Jpg.CompressionQuality, 所存的 jpg 的大小也會不同 另外, 您可以參考這篇討論: http://groups.google.com.tw/group/borland.public.delphi.graphics/browse_thread/thread/cc4b9df6d41fa29/7988a069eeb33346?lnk=st&q=delphi jf8bit filesize&rnum=1&hl=zh-TW#7988a069eeb33346 |
17kobe
初階會員 發表:86 回覆:73 積分:31 註冊:2007-07-30 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |