2010年12月16日 星期四

RGB<->YUY2

載點
https://docs.google.com/uc?id=0B4PwTcFHZPWbZGUwYTJkMmQtNjkxZi00YTMwLWJhMTEtNDE4N2U5ZThhYjNm&export=download&hl=zh_TW

外觀

關鍵程式碼:
void __fastcall TForm1::RGBToYUY2(Graphics::TBitmap *FrBmp,BYTE *dst)
{
  unsigned char *p,*src;
  int len,w,h,x,y;
  w=FrBmp->Width;
  h=FrBmp->Height;
  for(y=0;y<h;y++)
  {
    src=(unsigned char*)FrBmp->ScanLine[y];
    for(x=0;x<w;x+=2,src+=6,dst+=4)
    {
...
...
    }
  }
}
//---------------------------------------------------------------------------

HRESULT __fastcall TForm1::YUY2ToBMP(BYTE *yuy2,Graphics::TBitmap *dstbmp)
{
  int x,y;
  unsigned char *ty,*tu,*tv;
  ty=(unsigned char*)malloc(dstbmp->Width*dstbmp->Height);
  tu=(unsigned char*)malloc(dstbmp->Width*dstbmp->Height);
  tv=(unsigned char*)malloc(dstbmp->Width*dstbmp->Height);
  BYTE *pt,*py,*pu,*pv;
  pt=yuy2;
  py=ty;
  pu=tu;
  pv=tv;
  for(int y=0;y<dstbmp->Height;y++)
  {
    for(int x=0;x<dstbmp->Width;x+=2)
    {
....
....   
    }
  }
  py=ty;
  pu=tu;
  pv=tv;
  for(y=0;y<dstbmp->Height;y++)
  {
    char *linep=(char*)dstbmp->ScanLine[y];
    for(x=0;x<dstbmp->Width;x++)
    {
      unsigned int y=(*py++);
      int u=(int)(*pu++)-128;
      int v=(int)(*pv++)-128;
      float R,G,B;
      R = (float)y + 1.6*(float)u;
      G = (float)y - 0.9*(float)v - 0.5*(float)u;
      B = (float)y + 1.5*(float)v;
      if(R<0) R=0;
      if(R>255) R=255;
      if(G<0) G=0;
      if(G>255) G=255;
      if(B<0) B=0;
      if(B>255) B=255;
      *linep++=R;
      *linep++=G;
      *linep++=B;
    }
  }
  free(ty);
  free(tu);
  free(tv);
  return S_OK;
}
//---------------------------------------------------------------------------

RGB與YUY2轉換,不過轉換後圖檔看起來有些微差異...

測試程式執行次數

載點
https://docs.google.com/uc?id=0B4PwTcFHZPWbNTEwMTdhOWMtMDRjOS00M2RmLWFlNWQtMGQ5ZTUxMzg2MTcx&export=download&hl=zh_TW

外觀

關鍵程式碼:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  STARTUPINFO si;
  PROCESS_INFORMATION pi;
  ZeroMemory(&si,sizeof(si));
  si.cb=sizeof(si);
  ZeroMemory(&pi,sizeof(pi));
  CreateProcess(exepath.c_str(),NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);
  n++;
  Label1->Caption=n;
  if(n==Edit3->Text.ToInt())
  {
    Timer1->Enabled=false;
    Label1->Font->Color=clRed;
    Label1->Caption="Test Over";
  }
}
//---------------------------------------------------------------------------
使用Timer 讓要測試的執行檔能在選擇的秒數後啟動

Link List 練習

載點
https://docs.google.com/uc?id=0B4PwTcFHZPWbNDY0NzNhZjgtNmVhNS00YzQ0LWFhZGUtYjRhZTk5MTE0YTll&export=download&hl=zh_TW

外觀


關鍵程式碼:
struct Node
{
  int data;
  Node *next;
};
Node *head,*tail;
Node *newptr;

  newptr->data=StrToInt(InputBox("輸入資料",str,""));
  newptr->next=NULL;
  if(head==NULL)
    head=newptr;
  else
    tail->next=newptr;
  tail=newptr;

輸入資料後使用next 做連結

瀏覽圖片BCB

載點:
https://docs.google.com/uc?id=0B4PwTcFHZPWbYjUzNDQxNjYtYTk2Yi00ZTY4LTg1MTUtMWU1ZjQyZWY0MmM4&export=download&hl=zh_TW

外觀:

關鍵程式碼:
void __fastcall TForm1::FilterComboBox1Change(TObject *Sender)
{
  FileListBox1->Mask=FilterComboBox1->Mask;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)
{
  DirectoryListBox1->Drive=DriveComboBox1->Drive;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DirectoryListBox1Change(TObject *Sender)
{
  FileListBox1->Directory=DirectoryListBox1->Directory;
  Edit1->Text=DirectoryListBox1->Directory;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileListBox1Change(TObject *Sender)
{
  String file_name;
  file_name=FileListBox1->FileName;
  Edit1->Text=file_name;
  if(file_name!="")
    Image1->Picture->LoadFromFile(file_name);       
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
  if(Key==13)
  {
    if(FileExists(Edit1->Text))
      Image1->Picture->LoadFromFile(Edit1->Text);
  }
}
//---------------------------------------------------------------------------

顯示檔案,與讀圖

2010年12月15日 星期三

猜數字

載點:
https://docs.google.com/uc?id=0B4PwTcFHZPWbMTEyYzgwMTItZjM4Ny00OGRmLWI2MWEtMDk1NGFkNmI0N2Ji&export=download&hl=zh_TW

圖式:

關鍵程式碼:
  for(int i=0;i<4;i++)
  {
    ans_num[i]=-1;
    do
    {
      a=rand()%10;     
      tmp=ans_num[i];
      ans_num[i]=randnum[a];
      randnum[a]=tmp;
    }while(ans_num[i]<0);
    Label1->Caption=Label1->Caption+IntToStr(ans_num[i]);
  }
建出四個不同的數字

電話簿程式!

載點:
https://docs.google.com/uc?id=0B4PwTcFHZPWbMDYwOGMzYTctZjdhYi00NDY4LWE2NGEtMGZhNjAyZmY3Zjgw&export=download&hl=zh_TW

程式畫面:

關鍵程序碼:
  if(FileExists(sIniFile))
  {
    lRet = GetPrivateProfileString("People", "number", "0", sItemCount, sizeof(sItemCount), sIniFile);
    peoplecount=StrToInt(sItemCount);
    for(int i=0;i<peoplecount;i++)
    {
      lRet = GetPrivateProfileString("Name", IntToStr(i+1).c_str(), "0", sItemCount, sizeof(sItemCount), sIniFile);
      name[i]=sItemCount;
      lRet = GetPrivateProfileString("Phone", IntToStr(i+1).c_str(), "0", sItemCount, sizeof(sItemCount), sIniFile);
      number[i]=sItemCount;
    }
    tot=peoplecount;
  }

  if(FileExists(sIniFile))
  {
    WritePrivateProfileString("People","number",IntToStr(tot).c_str(), sIniFile);
    for(int i=0;i<tot;i++)
    {
      WritePrivateProfileString ("Name",IntToStr(i+1).c_str(),name[i].c_str(), sIniFile);
      WritePrivateProfileString ("Phone",IntToStr(i+1).c_str(),number[i].c_str(), sIniFile);
    }
  }

說明:
使用GetPrivateProfileString與WritePrivateProfileString 兩個functions,讀取與寫入.ini 檔!

2010年12月14日 星期二

Paint Box

下載連結:
https://docs.google.com/uc?id=0B4PwTcFHZPWbMjQxMTAzZjItMzBkNy00ZmQ4LWIwNjQtOGQxMDE2Yzc3NDU2&export=download&hl=zh_TW

程式畫面:

關鍵程式碼:
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
  if(draw==1)
    Image1->Canvas->LineTo(X,Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  draw=1;
  Image1->Canvas->MoveTo(X,Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  draw=0;
}
//---------------------------------------------------------------------------