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

把像素值轉成二進位

尚未結案
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-11 22:36:43 IP:220.141.xxx.xxx 未訂閱
大家好 請問如何把灰階像素值轉成二進位 並且可以儲存起來呢 例如把pixel value 255 =>11111111 而且可以把二進位數值儲存起來 可以讀取和用來作運算 謝謝 pork 上
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-11 23:09:23 IP:219.80.xxx.xxx 未訂閱
Hello pork,    參考底下10進制轉成2進制程式碼:
#include 
#include 
void trans(int);
int i;
int HexNum[8];
char HexChar[8];    int main(int argc, char* argv[])
{
  for (int n=0;n<8;n  )
      HexNum[n]=0;;
  i=0;
  trans(255);   //以255當例子      for (int n=7;n>=0;n--)
      {
       if (HexNum[n]>9)
           HexChar[n]=HexNum[n] 55;
       else
           HexChar[n]=HexNum[n] 48;
       cout << HexChar[n] << " " ;
      }
  getch();
  return 0;
}
void trans(int a)
{
  int quotient,remainder;
  if (a/2>0)
     {
      quotient=a/2;
      remainder=a%2;
      HexNum[i]=remainder;
      HexNum[i 1]=quotient;
      i  ;
      if (quotient>=2)
         return (trans(quotient));
     }
}
 int n,temp,a[100];
 temp = StrToInt(Edit1->Text);
 for (n=0 ; temp>0 ; n  )
  {
    a[n] = temp % 2 ;
    temp = temp / 2 ;
  }
 for (int i=n-1 ; i>=0 ; i--)
 Edit2->Text = Edit2->Text   a[i] ;
   #include "IdGlobal.hpp"
   unsigned int i=255;
   ShowMessage(IntToBin(i));
發表人 - nlj859 於 2004/10/11 23:30:37
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-14 22:27:28 IP:220.141.xxx.xxx 未訂閱
引言: int n,temp,a[100]; temp = StrToInt(Edit1->Text); for (n=0 ; temp>0 ; n ) { a[n] = temp % 2 ; temp = temp / 2 ; } for (int i=n-1 ; i>=0 ; i--) Edit2->Text = Edit2->Text a[i] ;
感謝您的回覆 請問如上面的程式碼若是值轉換二進位之後 要補滿成為八位元要如何做呢 因為我要做的是能夠轉成把灰階像素值轉成二進位後 每一個值都用八位元來表示 再來可能是取前四位元或是後四位元來做運算 謝謝 pork 上
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-17 09:46:59 IP:220.141.xxx.xxx 未訂閱
nlj859兄您好 我將您指導的用在下面這段程式碼中 主要作用是要把一張圖的像素值取出後 取前四碼再將後四碼補0後還原回去 可是試驗時 如果是只有一個PIXEL的圖時就沒問題 可是如果跑2*2的圖就會在這一行出現問題 Edit2->Text=AnsiString::StringOfChar('0',8-Edit2-Text.Length())+Edit2->Text; 訊息是 Access violation at address 32657D07 in module‘CC3260MT.DLL’.Write of address 00000000    可否請您指導 謝謝 pork 上  
 void __fastcall TForm1::GetClick(TObject *Sender)
{
        Graphics::TBitmap *Bmp1=new Graphics::TBitmap();
        Graphics::TBitmap *Bmp2=new Graphics::TBitmap();            Bmp1->Assign(Image1->Picture->Bitmap);            int n,temp,a[8],answer;            for(int i=0;iWidth;i  )
        for(int j=0;jHeight;j  )
        {
                pixel_value[i][j]=GetBValue(Bmp1->Canvas->Pixels[i][j]);
                temp=pixel_value[i][j];
                for (n=0 ; temp>0 ; n  )
                {
                a[n] = temp % 2 ; //取餘數
                temp = temp / 2 ; //除以二
                }                for (int p=n-1 ; p>=0 ; p--)
        {
        Edit2->Text = Edit2->Text   a[p] ;
        }
         Edit2->Text=AnsiString::StringOfChar('0',8-Edit2-Text.Length()) Edit2->Text;
         AnsiString b=Edit2->Text;
         Edit3->Text= b.SubString(0,4); //取前四位元
         //Edit4->Text=b.SubString(5,4);  //取後四位元             Edit5->Text=Edit3->Text "0000"; //取原前四位元後面補0到八位元
         answer=Edit5->Text[8]*1 Edit5->Text[7]*2 Edit5->Text[6]*4 Edit5->Text[5]*8
                 Edit5->Text[4]*16 Edit5->Text[3]*32 Edit5->Text[2]*64 Edit5->Text[1]*128-12240;//算出pixel值
         Bmp2->Canvas->Pixels[i][j]=answer 0x01000000;            }
        Image2->Picture->Bitmap->Assign(Bmp2);
pork
一般會員


發表:15
回覆:13
積分:5
註冊:2003-10-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-17 17:14:53 IP:220.141.xxx.xxx 未訂閱
nlj859兄您好 依照您的指導把程式碼改掉後 錯誤訊息依舊一樣 Edit2->Text=AnsiString::StringOfChar('0',8-Edit2->Text.Length()) Edit2->Text; //這行錯誤 訊息是 Access violation at address 32657D07 in module‘CC3260MT.DLL’.Write of address 00000000 可否請您指導 可否請教 該錯誤訊息代表是麼意思 謝謝 pork上
系統時間:2024-06-29 15:49:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!