影像轉換JPEG TO BMP?? |
尚未結案
|
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
shing187您好:
看看這篇對您有沒有幫助;
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29187 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~>
|
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
shing187您好:
引言: 我目前遇到的問題是我需要將JPEG轉換成BMP讀取一些資料 我使用JpegToBmp這一個元件 但是這個元件只能把已經存在硬碟中的一個JPEG檔案轉換成BMP 會把整個程式的執行拖慢....所以想問問看可不可以有其他的方法 會比現行的做法速度加快??您是指靜態影像嗎??要將*.jpg轉*.BMP的意思嗎?? Graphics::TBitmap *Bmp = new Graphics::TBitmap(); TJPEGImage *jpg=new TJPEGImage; jpg->LoadFromFile("*.jpg"); Bmp->Assign(jpg); Bmp->SaveToFile("*.bmp"); delete Bmp; delete jpg;順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> 發表人 - |
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我的JPEG目前是在TMemoryStream中 也可以這樣做嗎??shing187 你好: 請參考以下的做法 < class="code"> Graphics::TBitmap *bmp2=new Graphics::TBitmap; TJPEGImage *jpg=new TJPEGImage; TMemoryStream *ms2=new TMemoryStream; // ms2->LoadFrom...... jpg->LoadFromStream(ms2); jpg->CompressionQuality=100; bmp2->Assign(jpg); bmp2->SaveToFile("1.bmp"); delete ms2; delete jpg; delete bmp2; -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/04/25 15:45:22
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
請問一下
我使用JpegToBmp這個元件
TMemoryStream *msBuf = new TMemoryStream;
msBuf->SaveToFile("C:\\temp\\temp.jpg");
JpegToBmp1->JpegFile = "C:\\temp\\temp.jpg";
JpegToBmp1->BmpFile = "C:\\temp\\temp.bmp";
JpegToBmp1->CopyJpegToBmp();
bmp的資料都正確..... 但是如果使用
Graphics::TBitmap *bmp2=new Graphics::TBitmap;
TJPEGImage *jpg=new TJPEGImage;
TMemoryStream *ms2=new TMemoryStream;
TMemoryStream *ms3=new TMemoryStream;
// ms2->LoadFrom......
jpg->LoadFromStream(ms2);
jpg->CompressionQuality=100;
bmp2->Assign(jpg);
bmp2->SaveToStream(ms3);
然後去讀bmp中的資料卻跟之前做的不同??請問是什麼原因..... 還有jpg->CompressionQuality=100;這一行的作用為何??一定要加嗎??
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
|
wnhoo
高階會員 發表:75 回覆:443 積分:198 註冊:2003-04-22 發送簡訊給我 |
{BMP流的压缩是无损压缩}
{
全局变量
memoryStream:TMemoryStream;
memoryStream:=TMemoryStream.create;
} var
image:Timage;
jpgstream:TJPEGImage;
ss:tcanvas; begin
ss:=tcanvas.Create;
ss.Handle:=getdc(0);
image:=timage.Create(self);
image.width:=Screen.width;
image.Height:=screen.Height ;
image.picture.bitmap.PixelFormat:= pf16bit;
bitblt(image.canvas.handle,0,0,image.width,image.height,ss.handle,0,0,srccopy); {大大的BMP流
image.picture.bitmap.SaveToStream(memoryStream);
} {无损压缩BMP流 //uses Zlib.pas
//先定义变量count,DestStream,SourceStream
image.picture.bitmap.SaveToStream(memoryStream);
Count:=memoryStream.Size;
DestStream:=TMemoryStream.Create;
//压缩方式:clnone,clfastest,cldefault,clmax
SourceStream:=TCompressionStream.Create(cldefault, DestStream);
try
memoryStream.SaveToStream(SourceStream);
SourceStream.Free;
memoryStream.Clear;
memoryStream.WriteBuffer(Count, SizeOf(Count));
memoryStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
}
{还原BMP流 //uses Zlib.pas
//先定义变量count,buffer,DestStream,SourceStream
//memoryStream是压缩的BMP流
memoryStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream:=TMemoryStream.Create;
SourceStream:=TDecompressionStream.Create(memoryStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position:=0;
image.Picture.Bitmap.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
} {JPG流 //uses jpeg
jpgstream:= TJPEGImage.Create;
jpgstream.Assign(image.picture.bitmap);
jpgstream.CompressionQuality:=50;//压缩质量
jpgstream.Compress;
jpgstream.SaveToStream(memoryStream);//保存为JPG流
//使用JPG流 image.Picture.Assign(jpgstream);
jpgstream.free;
} ReleaseDC(0,ss.Handle);
image.free; {发送内存流...}
end; 风花雪月 e梦情缘
------
风花雪月 e梦情缘 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
shing187您好:
引言:應該是說 因為BMP圖檔裡存在我的程式需要計算的欄位 如果用之前的方法可以得到正確的值 但是速度非常慢如果改用另一個方法 速度快了不少但是得到的值是錯誤的 不知道是哪邊出了問題??這樣的形容好難猜喔...請問您的目的最主要是要做什麼?? 我看了您的程式碼 TMemoryStream *msBuf = new TMemoryStream; msBuf->SaveToFile("C:\\temp\\temp.jpg");您已經存成temp.jpg 那再用下面的code試試 Graphics::TBitmap *Bmp = new Graphics::TBitmap(); TJPEGImage *jpg=new TJPEGImage; jpg->LoadFromFile("C:\\temp\\temp.jpg"); Bmp->Assign(jpg); Bmp->SaveToFile("C:\\temp\\temp.bmp"); delete Bmp; delete jpg;順心 <>~我也是在學習的階段,所以請您多多見諒與指教~> |
shing187
一般會員 發表:45 回覆:63 積分:21 註冊:2003-01-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |