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

想請問有關JPEG的問題

答題得分者是:taishyang
chuckjr
一般會員


發表:11
回覆:20
積分:6
註冊:2002-12-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-23 14:08:54 IP:210.60.xxx.xxx 未訂閱
小弟查了一下板上有關JPEG的文章 也寫了一個.bmp轉成.jpg的小程式 不過還是有一些問題想要請教一下: 1.轉出來的.jpg是不是就是已經壓縮過的了.. 如果是的話,那請問一下有解壓縮的嘛..?? 2.Jpg->CompressionQuality 這一行是可加可不加嘛..?? 如果不加的話,是表示原本就有預設值了嗎..?? 不好意思問了這麼簡單的問題..~~ 謝謝大家
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-23 14:34:52 IP:140.135.xxx.xxx 未訂閱
chuckjr您好:   1.您可以觀察一下檔案的大小,就知道是不是壓縮過囉     您能看到壓縮過後的*.jpg圖片就表示您已經解壓縮了       2.可以不加,有預設值(90)用下面的Code驗證     
 
    TJPEGImage*jpg =new TJPEGImage();
    int CQ=jpg->CompressionQuality;
    ShowMessage(CQ);
    delete jpg;
    
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
chuckjr
一般會員


發表:11
回覆:20
積分:6
註冊:2002-12-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-23 14:50:13 IP:210.60.xxx.xxx 未訂閱
taishyang版主您好: 您的意思是只要我看的到.jpg檔, 就表示這張影像已經經過了壓縮跟解壓縮的程序了, 所以我才看的到...是嘛...@@" 再來我試著用檔案切割的方法.. 將一張.bmp的影像切割後存成.jpg complie沒問題,可是執行的時候卻有錯誤產生.. 想請問一下是哪邊有問題,這樣的程序對嘛..??
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-23 15:19:05 IP:140.135.xxx.xxx 未訂閱
chuckjr您好:    
引言: 您的意思是只要我看的到.jpg檔, 就表示這張影像已經經過了壓縮跟解壓縮的程序了, 所以我才看的到...是嘛...@@"
應該是對一半吧,當您做SaveToFile即為做壓縮的動作 LoadFromFile為解壓縮的動作(如同您所說的看到*.jpg影像) 至於您所提到的程式問題,麻煩您把程式碼貼上來囉 我能力沒有那麼強,可以[猜到]您的程式問題在哪邊 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
chuckjr
一般會員


發表:11
回覆:20
積分:6
註冊:2002-12-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-23 15:36:11 IP:210.60.xxx.xxx 未訂閱
taishyang您好:    不好意思忘記要把程式碼貼上來.. 我寫的程式是這樣的: < class="code"> Graphics::TBitmap *bmpSrc=new Graphics::TBitmap; TJPEGImage *jpgBuf=new TJPEGImage; int x=2; int y=2; int i,j,k; bmpSrc->LoadFromFile(OpenPictureDialog->FileName); if (SavePictureDialog->Execute()) { for(k=0;kPosition;k ) { for(i=0;iWidth=bmpSrc->Width/int(pow(2,k 1)); bmpDst->Height=bmpSrc->Height/int(pow(2,k 1)); bmpDst->Canvas->CopyMode=cmSrcCopy; bmpDst->Canvas->CopyRect(Rect(0,0,bmpDst->Width,bmpDst->Height),bmpSrc->Canvas,Rect(i*bmpDst->Width,j*bmpDst->Height,(i 1)*bmpDst->Width,(j 1)*bmpDst->Height)); if(i==0) { if (j==0) { bmpDst->SaveToFile("DstLL" IntToStr(k 1) ".bmp"); jpgBuf->Assign(bmpDst); jpgBuf->SaveToFile("DstLL" IntToStr(k 1) ".jpg"); } else { bmpDst->SaveToFile("DstLH" IntToStr(k 1) ".bmp"); jpgBuf->Assign(bmpDst); jpgBuf->SaveToFile("DstLH" IntToStr(k 1) ".jpg"); } } else { if(j==0) { bmpDst->SaveToFile("DstHL" IntToStr(k 1) ".bmp"); jpgBuf->Assign(bmpDst); jpgBuf->SaveToFile("DstHL" IntToStr(k 1) ".jpg"); } else { bmpDst->SaveToFile("DstHH" IntToStr(k 1) ".bmp"); jpgBuf->Assign(bmpDst); jpgBuf->SaveToFile("DstHH" IntToStr(k 1) ".jpg"); } } delete bmpDst; delete jpgBuf; } } } } delete bmpSrc; 程式的用意是在一張圖做完小波轉換之後 依照頻帶做切割 然後再存成.bmp跟.jpg的格式 寫法很拙劣~希望您看得懂... 謝謝
taishyang
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-23 16:46:45 IP:140.135.xxx.xxx 未訂閱
chuckjr您好:   您的程式在編譯時就有一些BUG,所以我提出我的方式您參考看看   如下圖所示    左邊是一層小波轉換後的圖形,右邊是切割後的圖形 假如您是做兩層小波轉換,則可將切割完後的[左上.BMP]再做一次切割 程式碼如下
 
Graphics::TBitmap *bmpSrc=new Graphics::TBitmap;
 Graphics::TBitmap *bmpDst=new Graphics::TBitmap;
 TJPEGImage*jpg=new TJPEGImage();
   bmpSrc->LoadFromFile("小波.bmp");
   bmpDst->Width=bmpSrc->Width/2;
   bmpDst->Height=bmpSrc->Height/2;
   SetStretchBltMode(bmpDst->Canvas->Handle, STRETCH_HALFTONE);
   bmpDst->Canvas->CopyMode=cmSrcCopy;
   bmpDst->Canvas->CopyMode=cmSrcCopy;
   bmpDst->Canvas->CopyRect(Rect(0, 0, bmpDst->Width, bmpDst->Height), bmpSrc->Canvas,Rect(0, 0, bmpSrc->Width/2, bmpSrc->Height/2));
   bmpDst->SaveToFile("左上.bmp");
    jpg->Assign(bmpDst);
    jpg->SaveToFile("左上.jpg");
   bmpDst->Canvas->CopyRect(Rect(0, 0, bmpDst->Width, bmpDst->Height), bmpSrc->Canvas,Rect(bmpSrc->Width/2, 0, bmpSrc->Width, bmpSrc->Height/2));
   bmpDst->SaveToFile("右上.bmp");
    jpg->Assign(bmpDst);
    jpg->SaveToFile("右上.jpg");
   bmpDst->Canvas->CopyRect(Rect(0, 0, bmpDst->Width, bmpDst->Height), bmpSrc->Canvas,Rect(0, bmpSrc->Height/2, bmpSrc->Width/2, bmpSrc->Height));
   bmpDst->SaveToFile("左下.bmp");
    jpg->Assign(bmpDst);
    jpg->SaveToFile("左下.jpg");
   bmpDst->Canvas->CopyRect(Rect(0, 0, bmpDst->Width, bmpDst->Height), bmpSrc->Canvas,Rect(bmpSrc->Width/2, bmpSrc->Height/2, bmpSrc->Width, bmpSrc->Height));
   bmpDst->SaveToFile("右下.bmp");
    jpg->Assign(bmpDst);
    jpg->SaveToFile("右下.jpg");
   delete bmpDst;
   delete bmpSrc;
   delete jpg;
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
chuckjr
一般會員


發表:11
回覆:20
積分:6
註冊:2002-12-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-23 17:37:42 IP:210.60.xxx.xxx 未訂閱
taishyang版主您好: 非常感謝您的指導~ 我知道我問題出在哪了~ 我的
系統時間:2024-05-05 18:37:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!