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

TBitmap 的複製

尚未結案
800
一般會員


發表:2
回覆:7
積分:1
註冊:2003-04-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-27 01:42:24 IP:61.59.xxx.xxx 未訂閱
Graphics::TBitmap *bmp = new Graphics::TBitmap(); bmp->LoadFromFile(FileListBox1->FileName); Image1->Picture->Assign(bmp);    從檔案讀了一個 bitmap 檔到 bmp 之後, 我的處理方式是直接從 bmp scanline 出來處理後再寫回去. 像這樣: for(j=0; jHeight; j ) { ptr = (Byte *)bmp->ScanLine[j]; for(i=0; iWidth*3; i =3) { gray = (ptr[i]*28 ptr[i 1]*151 ptr[i 2]*77)/256; ptr[i] = ptr[i 1] = ptr[i 2] = (Byte)gray; } } 因為現在要做很多種不同的處理, 我不想破壞原本 bmp 的內容, 所以想把楚魯完後的資料寫到 newbmp 裡面去, 然後再把 newbmp 的內容丟到 image 裡面去秀出來. 請問, 這樣子的步驟要怎麼寫比較好? 謝謝.
Royce520
高階會員


發表:18
回覆:157
積分:100
註冊:2002-09-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-27 03:05:10 IP:61.216.xxx.xxx 未訂閱
800 你好,   可以在圖形從影像檔案讀出時, 存一份備份到 TMemoryStream 物件,   然後 bmp 資料就做你的影像處理並顯示...   當然需要原來的圖形資料是 再 bmp->LoadFromStream... 這樣      題外話, 要做灰階圖, 有一個 屬性 Monochrome 設為 true,   好像也可以辦到(ps. 我沒試過 :p) *真實的事物最美, 簡單的道理最好, 我能體會的 太少*
------
不要忘記呼吸,不要忘記編程! ∩__∩
clarkkent
初階會員


發表:29
回覆:83
積分:32
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-27 09:40:43 IP:61.59.xxx.xxx 未訂閱
800兄 您好: Source與Target均為Image 作法: 【button1】 一、先各載入一張圖(OpenPictureDialog1選擇) 【button2】 二、用一個矩陣儲存Source的資訊,再做灰階化 當然您也可以new一個bitmap來存放Source的資訊→再做您要的處理 三、畫回Target    您看到的程式中可能會有些沒法顯示,請參考原始碼
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 if(OpenPictureDialog1->Execute())
   {
    Source->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    Target->Picture->LoadFromFile(OpenPictureDialog1->FileName);
    /* Target 要先載入一張圖才可以 */
   }
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button2Click(TObject *Sender)
{
 float testIMG[240][320];
 int i,j;
 BYTE* Line;
 float Y;     for(i=0;iHeight;i  )
     {
      for(j=0;jWidth;j  )
         {
         Line=(BYTE*)Source->Picture->Bitmap->ScanLine[(Source->Height-1)-i];
         Y=static_cast(Line[3*j] Line[3*j 1] Line[3*j 2])/3;
         testIMG[i][j] = Y;
         }
     }
 for(i=0;iHeight;i  )
     {
      for(j=0;jWidth;j  )
         {
         Line=(BYTE*)Target->Picture->Bitmap->ScanLine[(Source->Height-1)-i];
         Line[3*j]=(BYTE)testIMG[i][j];
         Line[3*j 1]=(BYTE)testIMG[i][j];
         Line[3*j 2]=(BYTE)testIMG[i][j];
         }
      }
  Target->Canvas->Draw(0,0,Target->Picture->Bitmap);
新手上路,請多指教 如果此文章違反版規 還請版主告知並刪除 Just do it
------
JUST DO IT
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-27 17:41:26 IP:61.231.xxx.xxx 未訂閱
800您好:  
引言:因為現在要做很多種不同的處理, 我不想破壞原本 bmp 的內容, 所以想把楚魯完後的資料寫到 newbmp 裡面去, 然後再把 newbmp 的內容丟到 image 裡面去秀出來.
將bmp assign給newbmp, newbmp再assign給Image即可 亦即
 
 Graphics::TBitmap *bmp = new Graphics::TBitmap();
 Graphics::TBitmap *newbmp = new Graphics::TBitmap();
 //做完您的處理
 newbmp->Assign(bmp);
 Image1->Picture->Bitmap->Assign(newbmp);
 delete bmp;
 delete newbmp;
 
順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
800
一般會員


發表:2
回覆:7
積分:1
註冊:2003-04-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-28 16:52:58 IP:210.59.xxx.xxx 未訂閱
謝謝各位的答覆    好感動
系統時間:2024-04-20 13:06:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!