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

關於圖形放大的問題

答題得分者是:RaynorPao
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-16 17:41:14 IP:140.117.xxx.xxx 未訂閱
可以幫我看一下我的程式碼嗎?想請問一下這樣寫我的觀念是對的還是錯的, 我找不出我到底錯在哪裡了,因為出來的圖的顏色,跟原來圖的顏色不同。    
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
Graphics::TBitmap *BMP1= new Graphics::TBitmap() ;
 Byte *ptr=NULL;
 Byte *ptr1=NULL;
 BMP->Assign(Image1->Picture->Bitmap);
 BMP1->Width=BMP->Width*2;
 BMP1->Height=BMP->Height*2;
 BMP1->PixelFormat=pf24bit;
 for(int y=0;yHeight;y++)
 { ptr = (Byte *)BMP->ScanLine[y];
  for(int kk=0;kk<2;kk++)
  {
   ptr1 = (Byte *)BMP1->ScanLine[2*y+kk];
  for(int x=0;xWidth;x++)
   {
      for(int ll=0;ll<2;ll++)
    { ptr1[2*x*3+ll]=ptr[x*3]    ;
      ptr1[2*x*3+1+ll]=ptr[x*3+1]   ;
      ptr1[2*x*3+2+ll]=ptr[x*3+2]   ;
    }
   }
  }
 }Image2->Picture->Assign(BMP1);
 delete BMP;
 delete BMP1;
附上圖= ="
wen142
一般會員


發表:22
回覆:27
積分:14
註冊:2004-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-16 20:17:09 IP:140.135.xxx.xxx 未訂閱
poaivy 大大~~    我比較不了解您的用意 不過就您的程式碼來說    
 
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
Graphics::TBitmap *BMP1= new Graphics::TBitmap() ;
 Byte *ptr=NULL;
 Byte *ptr1=NULL;
 BMP->Assign(Image1->Picture->Bitmap);
 BMP1->Width=BMP->Width*2;
 BMP1->Height=BMP->Height*2;
 BMP1->PixelFormat=pf24bit;
 for(int y=0;yHeight;y  )
 { ptr = (Byte *)BMP->ScanLine[y];
  for(int kk=0;kk<2;kk  )
  {
   ptr1 = (Byte *)BMP1->ScanLine[2*y kk];
  for(int x=0;xWidth;x  )
   {
      for(int ll=0;ll<2;ll  )
    {           ptr1[2*x*3]=ptr[x*3]    ;
      ptr1[2*x*3 1]=ptr[x*3 1]   ;
      ptr1[2*x*3 2]=ptr[x*3 2]   ;    //可能改成這樣會比較接近您要的 
//但是您若是想要將影像放大 似乎作法上不太對        }
   }
  }
 }Image2->Picture->Assign(BMP1);
 delete BMP;
 delete BMP1;    
是否可以將您的想法表達清楚 這樣大家也比較好了解如何幫助您
wen142
一般會員


發表:22
回覆:27
積分:14
註冊:2004-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-16 20:19:55 IP:140.135.xxx.xxx 未訂閱
poaivy 大大~~    我比較不了解您的用意 不過就您的程式碼來說    
 
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
Graphics::TBitmap *BMP1= new Graphics::TBitmap() ;
 Byte *ptr=NULL;
 Byte *ptr1=NULL;
 BMP->Assign(Image1->Picture->Bitmap);
 BMP1->Width=BMP->Width*2;
 BMP1->Height=BMP->Height*2;
 BMP1->PixelFormat=pf24bit;
 for(int y=0;yHeight;y++)
 { ptr = (Byte *)BMP->ScanLine[y];
  for(int kk=0;kk<2;kk++)
  {
   ptr1 = (Byte *)BMP1->ScanLine[2*y+kk];
  for(int x=0;xWidth;x++)
   {
      for(int ll=0;ll<2;ll++)
    {           ptr1[2*x*3]=ptr[x*3]    ;
      ptr1[2*x*3+1]=ptr[x*3+1]   ;
      ptr1[2*x*3+2]=ptr[x*3+2]   ;    //可能改成這樣會比較接近您要的 
//但是您若是想要將影像放大 似乎作法上不太對        }
   }
  }
 }Image2->Picture->Assign(BMP1);
 delete BMP;
 delete BMP1;    
是否可以將您的想法表達清楚 這樣大家也比較好了解如何幫助您
RaynorPao
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-16 21:24:45 IP:211.20.xxx.xxx 未訂閱
引言: 可以幫我看一下我的程式碼嗎?想請問一下這樣寫我的觀念是對的還是錯的, 我找不出我到底錯在哪裡了,因為出來的圖的顏色,跟原來圖的顏色不同。
Image1->Picture->Bitmap->PixelFormat=pf24bit;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
Graphics::TBitmap *BMP1= new Graphics::TBitmap() ;
 Byte *ptr=NULL;
 Byte *ptr1=NULL;
 BMP->Assign(Image1->Picture->Bitmap);
 BMP1->Width=BMP->Width*2;
 BMP1->Height=BMP->Height*2;
 BMP1->PixelFormat=pf24bit;
 for(int y=0;yHeight;y++)
 { ptr = (Byte *)BMP->ScanLine[y];
  for(int kk=0;kk<2;kk++)
  {
   ptr1 = (Byte *)BMP1->ScanLine[2*y+kk];
  for(int x=0;xWidth;x++)
   {
      for(int ll=0;ll<2;ll++)
    { ptr1[2*x*3+ll]=ptr[x*3]    ;
      ptr1[2*x*3+1+ll]=ptr[x*3+1]   ;
      ptr1[2*x*3+2+ll]=ptr[x*3+2]   ;
    }
   }
  }
 }Image2->Picture->Assign(BMP1);
 delete BMP;
 delete BMP1;
附上圖= ="
poaivy 你好:
(1)你的影像長寬各放大一倍之後,Pixels 會變多 (原來的 4 倍),根據你的結
   果看來,應該是沒有把所有的 Pixels 填滿,才會有這樣子 (網狀) 的效果
(2)先試試看以下的範例程式碼是否可行?
   >>>>>>>>>>>> >
   >    < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --    發表人 - RaynorPao 於 2004/11/16  21:27:21
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
poaivy
中階會員


發表:40
回覆:78
積分:53
註冊:2004-08-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-16 22:10:28 IP:140.117.xxx.xxx 未訂閱
多謝兩位解答,關於RaynorPao所提到的新方法,並不是我想使用的方法,雖然說比較好用,我想用的方法很簡單,只是要把原來的一點pixel變成兩點,以便把圖形變大,只是我比較納悶的是為啥會出現黃色? 至於wen142大大所說的改成以下寫法,       ptr1[2*x*3]=ptr[x*3]    ;       ptr1[2*x*3+1]=ptr[x*3+1]   ;       ptr1[2*x*3+2]=ptr[x*3+2]   ; 我發現這樣子的話,在中間處會出現空格= ="所以我才會多寫出  for(int ll=0;ll<2;ll ) { ptr1[2*x*3 ll]=ptr[x*3] ; ptr1[2*x*3 1 ll]=ptr[x*3 1] ; ptr1[2*x*3 2 ll]=ptr[x*3 2] ; } 以便把空格填滿。填滿的方式則為跟前一點同樣pixel值。 以上的發言不曉得兩位大大知道我為啥要這樣做了嗎? 多謝RaynorPao所提到的新方法,我會去研究看看的。
系統時間:2024-05-17 14:37:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!