對JPEG圖檔作旋轉動作 |
尚未結案
|
hillel5021
一般會員 發表:5 回覆:11 積分:3 註冊:2003-05-23 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請問有沒有前輩用Delphi做過將JPEG的圖作旋轉的動作,我查過之前文章,都是用BCB做的,而且好像都只能針對BMP的圖檔作旋轉動作,請問有沒有前輩能交教我如何對JPEG圖檔作旋轉動作,非常感激,謝謝 hillel5021 你好: (1)如 taishyang 所說,應該是沒有辦法直接對 JPEG 做旋轉的動作,因 JPEG 是將 Bitmap 做壓縮、編碼所得到的結果,也因此沒有辦法直接得到原本每 一點的 RGB 值 (2)所以,應該是要先把 JPEG 轉成 Bitmap,然後做旋轉的運算,等到運算完成 以後,再把運算完成的結果,轉回 JPEG (如果有必要的話) (3)有關 JPEG 與 Bitmap 之間的互轉,你可以善加利用本站的搜尋功能,就可 以找到很多這方面的相關文章 (4)至於旋轉的做法有滿多的,也因為功能上的不同 (例如: 旋轉角度的限制), 形成的難易度也有差別,詳細的做法,請參考以下的連結文章 http://www.fastgraph.com/help/rotate_delphi.html http://www.nsonic.de/Delphi/txt_WIS00263.htm-- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
hillel5021
一般會員 發表:5 回覆:11 積分:3 註冊:2003-05-23 發送簡訊給我 |
|
hillel5021
一般會員 發表:5 回覆:11 積分:3 註冊:2003-05-23 發送簡訊給我 |
msstream:=TMemoryStream.Create ;
Image1.Picture.Graphic.SaveToStream(msstream);
Jpeg1 :=TJpegImage.Create;
Jpeg1.LoadFromStream(msstream);
bmp1 :=TBitmap.Create;
bmp1.Assign(Jpeg1); 請問前輩,上面程式中,為什麼執行到Jpeg1.LoadFromStream(msstream);時 ,就會出現'Illegal Character in input file ($A140)' 的錯誤訊息阿,我有uses jpeg ,也有宣告Jpeg1:TJpegImage了阿 ,請前輩幫我看看好嗎,謝謝
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
hillel5021
一般會員 發表:5 回覆:11 積分:3 註冊:2003-05-23 發送簡訊給我 |
謝謝各位前輩的指導與幫助,我終於試出了如何將jpeg圖旋轉的程式了,我貼在下面,以供之後有人可以作為參考.再此謝謝之前給過我指示的前輩,謝謝
taishyang , RaynorPao , hagar前輩的指導,真的非常謝謝
var
x,y:Integer;
Jpeg1:TJpegImage;
bmp1,tmpbmp:TBitmap;
begin
Jpeg1 :=TJpegImage.Create;
Jpeg1.LoadFromFile('c:\test.jpg');
DeleteFile('c:\test.jpg');
bmp1 :=TBitmap.Create;
bmp1.Assign(Jpeg1);
tmpbmp:=TBitmap.Create;
tmpbmp.Width:=bmp1.Height;
tmpbmp.Height:=bmp1.Width;
for x:=0 to bmp1.Width do
for y:=0 to bmp1.Height do
tmpbmp.Canvas.Pixels[y,bmp1.Width-1-x]:=bmp1.Canvas.Pixels[x,y];
Image1.Picture.Bitmap:=tmpbmp;
Jpeg1.Assign(tmpbmp); Jpeg1.SaveToFile('c:\test.jpg');
Jpeg1.Free;
bmp1.Free;
tmpbmp.Free;
end; 對了,再此再問一個問題喔,我這程式處理一個257K的圖片旋轉,需要20秒,算是正常嗎?還是有更快的演算方法呢? 發表人 - hillel5021 於 2003/07/16 01:57:24
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 謝謝各位前輩的指導與幫助,我終於試出了如何將jpeg圖旋轉的程式了,我貼在下面,以供之後有人可以作為參考.再此謝謝之前給過我指示的前輩,謝謝 taishyang , RaynorPao , hagar前輩的指導,真的非常謝謝 var x,y:Integer; Jpeg1:TJpegImage; bmp1,tmpbmp:TBitmap; begin Jpeg1 :=TJpegImage.Create; Jpeg1.LoadFromFile('c:\test.jpg'); DeleteFile('c:\test.jpg'); bmp1 :=TBitmap.Create; bmp1.Assign(Jpeg1); tmpbmp:=TBitmap.Create; tmpbmp.Width:=bmp1.Height; tmpbmp.Height:=bmp1.Width; for x:=0 to bmp1.Width do for y:=0 to bmp1.Height do tmpbmp.Canvas.Pixels[y,bmp1.Width-1-x]:=bmp1.Canvas.Pixels[x,y]; Image1.Picture.Bitmap:=tmpbmp; Jpeg1.Assign(tmpbmp); Jpeg1.SaveToFile('c:\test.jpg'); Jpeg1.Free; bmp1.Free; tmpbmp.Free; end; 對了,再此再問一個問題喔,我這程式處理一個257K的圖片旋轉,需要20秒,算是正常嗎?還是有更快的演算方法呢? hillel5021 你好: (1)非常感謝你的熱心分享 ( > > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
Rain
資深會員 發表:31 回覆:236 積分:268 註冊:2003-02-17 發送簡訊給我 |
使用 ScanLine要比Pixels快不少,在網路上找了一段用ScanLine處理旋轉的代碼,測試了一下,整個過程要比你原來的快4倍左右,可參考看看:
procedure TForm1.Button1Click(Sender: TObject); var i, j, W:Integer; bmp1, tmpbmp: TBitmap; Jpeg1: TJpegImage; t: DWord; ScOrg, ScDest: array of PIntegerArray; begin //t := GetTickCount; Jpeg1 :=TJpegImage.Create; bmp1 := TBitmap.Create; tmpbmp:= TBitmap.Create; try Jpeg1.LoadFromFile('c:\test.jpg'); DeleteFile('c:\test.jpg'); bmp1.Assign(Jpeg1); bmp1.PixelFormat := pf32bit; tmpbmp.Assign(bmp1); W := bmp1.Width; bmp1.Width := bmp1.Height; bmp1.Height := W; Dec(W); SetLength(ScDest, bmp1.Height); SetLength(ScOrg, tmpbmp.Height); for i:=0 to bmp1.Height-1 do ScDest[i] := bmp1.ScanLine[i]; for i:=0 to tmpbmp.Height-1 do ScOrg[i] := tmpbmp.ScanLine[i]; for i:=0 to bmp1.Height-1 do for j:=0 to bmp1.Width-1 do ScDest[W-i][j] := ScOrg[j][i]; Image1.Picture.Bitmap := bmp1; Jpeg1.Assign(bmp1); Jpeg1.SaveToFile('c:\test.jpg'); //ShowMessageFmt('%d', [GetTickCount - t]); finally tmpbmp.Free; bmp1.Free; Jpeg1.Free; end; end;另外實現任意角度的旋轉可參考這裏: http://www.delphibbs.com/delphibbs/dispq.asp?lid=875885 發表人 - Rain 於 2003/07/17 10:38:46 |
hillel5021
一般會員 發表:5 回覆:11 積分:3 註冊:2003-05-23 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |