全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2473
推到 Plurk!
推到 Facebook!

影像轉換JPEG TO BMP??

尚未結案
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-24 18:41:43 IP:211.78.xxx.xxx 未訂閱
請問如果想將jpeg格式的TMemoryStream 轉換成BMP格式的MemoryStream,該怎麼作?? 發表人 - shing187 於 2003/04/24 18:47:53
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-24 19:10:51 IP:140.135.xxx.xxx 未訂閱
shing187您好:   看看這篇對您有沒有幫助;   http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29187 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-25 11:33:34 IP:211.78.xxx.xxx 未訂閱
taishyang你好.... 那篇文章感覺看不太懂,好像不是我要的東西..... 我目前遇到的問題是我需要將JPEG轉換成BMP讀取一些資料 我使用JpegToBmp這一個元件 但是這個元件只能把已經存在硬碟中的一個JPEG檔案轉換成BMP 會把整個程式的執行拖慢....所以想問問看可不可以有其他的方法 會比現行的做法速度加快?? 謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-25 12:50:26 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-25 13:36:24 IP:211.78.xxx.xxx 未訂閱
我的JPEG目前是在TMemoryStream中 也可以這樣做嗎??
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-25 15:44:03 IP:203.73.xxx.xxx 未訂閱
引言: 我的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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-25 17:44:56 IP:211.78.xxx.xxx 未訂閱
請問一下 我使用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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-25 17:50:58 IP:140.135.xxx.xxx 未訂閱
shing187您好:    
引言: 然後去讀bmp中的資料卻跟之前做的不同??請問是什麼原因..... 還有jpg->CompressionQuality=100;這一行的作用為何??一定要加嗎??
怎樣的不同,能不能再詳述一下 > > <>~我也是在學習的階段,所以請您多多見諒與指教~
shing187
一般會員


發表:45
回覆:63
積分:21
註冊:2003-01-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-04-25 18:05:58 IP:211.78.xxx.xxx 未訂閱
應該是說 因為BMP圖檔裡存在我的程式需要計算的欄位 如果用之前的方法可以得到正確的值 但是速度非常慢 如果改用另一個方法 速度快了不少 但是得到的值是錯誤的 不知道是哪邊出了問題?? 請指教!!
wnhoo
高階會員


發表:75
回覆:443
積分:198
註冊:2003-04-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-04-25 18:44:57 IP:61.155.xxx.xxx 未訂閱
{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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-04-25 19:16:15 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-04-28 09:29:10 IP:211.78.xxx.xxx 未訂閱
謝謝大家的指教 我的問題已經解決囉!! 我太豬頭....忘記把MemoryStream的Position設為0 所以得到的資料都不正確 不過還是謝謝大家!!
系統時間:2024-05-09 6:46:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!