如何將圖形'實際'的縮小??? |
尚未結案
|
hazard
一般會員 發表:30 回覆:24 積分:10 註冊:2006-10-28 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
hazard
一般會員 發表:30 回覆:24 積分:10 註冊:2006-10-28 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 感謝你的回答,我照你的作法卻遇到問題... 我是從JPG檔匯入的,等縮小完成,可以用TImage看得到縮小後的圖形,但存檔後(存成JPG),開啟後,卻是空白的...????harzard 你好: 以上的問題可以分幾個階段 debug 有助於釐清你的問題 < class="code"> (1)匯入 jpg 後~~馬上儲存成另外一個 jpg,然後用 ACDSee 去看看是否檔案 內容正確,如果正確的話,代表這個步驟沒有問題 (2)貼到 TImage 後~~馬上儲存成另外一個 bmp,然後用 ACDSee 去看看是否 檔案內容正確,如果正確的話,代表這個步驟沒有問題 備註: 另外~~有關 bmp 及 jpg 的互轉 請參考以下連結範例說明 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23484 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20966 -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
axsoft
版主 發表:681 回覆:1056 積分:969 註冊:2002-03-13 發送簡訊給我 |
引言: 直接用 StretchBlt 這個 API 就可以解決!! 不用這麼麻煩!! 友誼自分享開始 ^_^ PlatoWuPlatoWu您好: 可否來個範例解說給大伙參考一下,Help人人會查,但不一定人人都會用! 網路志工聯盟----Visita網站http://www.vista.org.tw ---[ 發問前請先找找舊文章 ]--- |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
http://www.tech521.com/show_data.asp?tid=1931 --
Everything I say is a lie. 站長附上:
var
jpg :TJpegImage;
bmp,tmpbmp :TBitmap;
begin
jpg :=TJpegImage.Create;
jpg.LoadFromFile(.....);
bmp :=TBitmap.Create;
bmp.Assign(jpg);
tmpbmp :=TBitmap.Create;
tmpbmp.Width :=bmp.Width div 2;
tmpbmp.Height :=bmp.Height div 2;
StretchBlt(tmpbmp.Canvas.Handle,0,0,tmpbmp.Width,tmpbmp.Height,
bmp.Canvas.Handle,0,0,bmp.Width,bmp.Height,SRCCOPY);
jpg.Assign(tmpbmp);
jpg.SaveToFile(........);
jpg.Free;
bmp.Free;
tmpbmp.Free;
end;
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
hazard
一般會員 發表:30 回覆:24 積分:10 註冊:2006-10-28 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
測試報告 :
1.使用 CopyRect 或 StretchBlt 的方法 , 轉換 SIZE 後轉出來的圖形顏色會嚴重失真
2.使用站長的範例 , 我將其修改用於轉任何 JPG 檔為 640 X 480 SIZE 的檔案 , 測試 OK
//--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) //內差法 (for jpg) { TJPEGImage *jpg = new TJPEGImage(); Graphics::TBitmap *bmp1 = new Graphics::TBitmap(); Graphics::TBitmap *bmp2 = new Graphics::TBitmap(); jpg->LoadFromFile("c:\\test.jpg"); bmp1->Assign(jpg); //預改變的 Size bmp2->Width=640; bmp2->Height=480; int x1,y1,x2,y2,x0,y0,dx,dy,x,y; x1=bmp1->Width; y1=bmp1->Height; x2=bmp2->Width; y2=bmp2->Height; dx=0; x0=0; for (x=0 ; x<=bmp2->Width-1 ; x ) { dy=0; y0=0; dx=dx x1; while (dx>=x2) { x0 ; dx=dx-x2; } for (y=0 ; y<=bmp2->Height-1 ; y ) { dy=dy y1; while (dy>=y2) { y0 ; dy=dy-y2; } bmp2->Canvas->Pixels[x][y]=bmp1->Canvas->Pixels[x0][y0]; } } jpg->Assign(bmp2); jpg->SaveToFile("c:\\test2.jpg"); delete jpg; delete bmp1; delete bmp2; } //--------------------------------------------------------------------------- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |