⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmpchange.cpp

📁 LCD图形数据生成软件源程序
💻 CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "bmpchange.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpeClick(TObject *Sender)
{
  if(OpenD->Execute())
  {
    img->Picture->LoadFromFile(OpenD->FileName);

    LH->Caption="Height="+IntToStr(img->Height);

    LW->Caption="Width="+IntToStr(img->Width);
    int m=img->Height/8;
    if(img->Height%8)m++;
    total->Caption="数据总数="+IntToStr(m*img->Width);
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ProClick(TObject *Sender)
{
  if(radH->Checked)   radVClick(Sender);
  else
  {
  if(radgro->Checked) radordClick(Sender);
  else
  {
  BYTE  tempdata=0,temp=1,col=0,memoline=0;
  if(comnumber->Text.Trim()==""){ShowMessage("每行的数据个数不能为空");return;}
  int  hang=1;
  AnsiString tmn,nmk,strdata="",totalstr="DB  ";
  if(!frmasm->Checked)totalstr="";
 int mn=img->Height%8;
 int row=img->Height/8;
 datamemo->Lines->Clear();
 datamemo->Lines->Add("");
  if(mn) row++;
// if(mn)row++;
// ShowMessage(IntToStr(row));
 for(int j=0;j<row;j++)

 for(int i=0;i<img->Width;i++)
   {
     for(int m=0;(m<8)&&(j*8+m<img->Height);m++)
       {
       if((img->Canvas->Pixels[i][j*8+m]==0))tempdata+=temp;
       temp=temp*2;  //ShowMessage(IntToStr(temp));
       }
       temp=1;
        if(radup->Checked)
                {
                  int np=0,mp=128,xmp=0,mndata=1 ;
                   for(;np<8;np++)
                        {
                        if(tempdata/mp)xmp+=mndata;
                        mndata=mndata*2;
                        tempdata=tempdata%mp;
                        mp=mp/2;
                        }
                   tempdata=xmp;
                 }
       if(rad0->Checked)tempdata=~tempdata;
       if(frmasm->Checked)
       strdata=IntToHex(tempdata,3)+"H";
       else strdata="0x"+IntToHex(tempdata,3);
        tempdata=0;
       if(col==0)totalstr=totalstr+strdata ;
       else totalstr=totalstr+","+strdata ;
        col++;// ShowMessage(totalstr);
      if(col==StrToInt(comnumber->Text)) {if(frmasm->Checked)totalstr=totalstr+"    ;";
        else totalstr=totalstr+",  //";totalstr=totalstr+"Row NO."+IntToStr(hang);hang++;  datamemo->Lines->Add(totalstr) ;col=0;strdata="";totalstr="DB  ";if(!frmasm->Checked)totalstr="";memoline++;}
     }
    if(col>0)  datamemo->Lines->Add(totalstr);
   // if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(row*img->Width));
  //  else datamemo->Lines->Add("//The number of data is "+IntToStr(row*img->Width));
   // ShowMessage(IntToStr(datamemo->Lines->Count));
    if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(row*img->Width)+"  每组水平点数为:"+comhor->Text+"      "+
   " 每行数据个数为:"+comnumber->Text);
    else datamemo->Lines->Add("//The number of data is "+IntToStr(row*img->Width)+"  每组水平点数为:"+comhor->Text+"     每行数据个数为:"+comnumber->Text);
   }
   }
  }
//---------------------------------------------------------------------------
void __fastcall TForm1::imgMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 disp->Caption="Pixels["+IntToStr(X)+"]["+IntToStr(Y)+"]="+IntToStr(img->Canvas->Pixels[X][Y]);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{
  datamemo->Lines->Clear();
  for(int i=5;i<300;i++)comnumber->AddItem(IntToStr(i),this);
  comnumber->ItemIndex=15;
  for(int j=5;j<300;j++)comhor->AddItem(IntToStr(j),this);
  comhor->ItemIndex=59;
 // comhor->Enabled=False;   
}
//---------------------------------------------------------------------------

void __fastcall TForm1::SavClick(TObject *Sender)
{
 if(SaveD->Execute())
   {
    AnsiString str=SaveD->FileName;
   if(str.SubString(str.Length()-3,str.Length()).UpperCase()!=".TXT")str=str+".TXT";
   datamemo->Lines->SaveToFile(str);
}  }
//---------------------------------------------------------------------------



void __fastcall TForm1::radordClick(TObject *Sender)
{
  if(radord->Checked)comhor->Enabled=false;else comhor->Enabled=true;
  if(radH->Checked)   radVClick(Sender);
  else
  {
  if(radord->Checked) ProClick(Sender);
    else
    {
       if(comhor->Text.Trim()==""){ShowMessage("水平每组的点数不能为空");return;}
       BYTE  tempdata=0,temp=1,col=0,memoline=0;
      if(comnumber->Text.Trim()==""){ShowMessage("每行的数据个数不能为空");return;}
      int  hang=1,mkl=0;;
     AnsiString tmn,nmk,strdata="",totalstr="DB  ";
     if(!frmasm->Checked)totalstr="";
    int mn=img->Height%8;
    int row=img->Height/8;
    int mk=StrToInt(comhor->Text);
    int group=img->Width/mk;
    if(img->Width%mk)group++;
    datamemo->Lines->Clear();
    datamemo->Lines->Add("");
    if(mn) row++;
    int n=0  ;
    int num=0;
// if(mn)row++;
// ShowMessage(IntToStr(row));
 for(;n<group;n++)
   {
     for(int j=0;j<row;j++)
     {
     for(int i=0;(i<mk)&&(n*mk+i<img->Width);i++)
      {
     for(int m=0;(m<8)&&(j*8+m<img->Height);m++)
        {
         if((img->Canvas->Pixels[n*mk+i][j*8+m]==0))tempdata+=temp;
         temp=temp*2;  //ShowMessage(IntToStr(temp));
         }

         temp=1;
         num++;
         mkl++;

                if(radup->Checked)
                {
                  int np=0,mp=128,xmp=0,mndata=1 ;
                   for(;np<8;np++)
                        {
                        if(tempdata/mp)xmp+=mndata;
                        mndata=mndata*2;
                        tempdata=tempdata%mp;
                        mp=mp/2;
                        }
                   tempdata=xmp;
                 }
       if(rad0->Checked)tempdata=~tempdata;
       if(frmasm->Checked)
       strdata=IntToHex(tempdata,3)+"H";
       else strdata="0x"+IntToHex(tempdata,3);
       tempdata=0;
       if(col==0)totalstr=totalstr+strdata ;
       else totalstr=totalstr+","+strdata ;
        col++;// ShowMessage(totalstr);
      if(col==StrToInt(comnumber->Text)) {if(frmasm->Checked)totalstr=totalstr+"    ;";
        else totalstr=totalstr+",  //";totalstr=totalstr+"Row NO."+IntToStr(hang);hang++;  datamemo->Lines->Add(totalstr) ;col=0;strdata="";totalstr="DB  ";if(!frmasm->Checked)totalstr="";memoline++;}
      }

   // ShowMessage(IntToStr(datamemo->Lines->Count));
     }
      if(col>0)  datamemo->Lines->Add(totalstr);
      col=0;
     totalstr="DB  ";
     if(!frmasm->Checked)totalstr="";
     AnsiString strm;
     hang=1;
     strm=";"; if(!frmasm->Checked) strm="//";
     datamemo->Lines->Add(strm);
     datamemo->Lines->Add(strm+"第"+IntToStr(n+1)+"组数据结束"+"   数据个数为:"+IntToStr(num));
     datamemo->Lines->Add(strm);
     num=0;
     }
   if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(row*img->Width)+"  每组水平点数为:"+comhor->Text+
   "       每行数据个数为:"+comnumber->Text);
    else datamemo->Lines->Add("//The number of data is "+IntToStr(mkl)+"  每组水平点数为:"+comhor->Text+"       每行数据个数为:"+comnumber->Text);
    }
    }
}
//---------------------------------------------------------------------------


void __fastcall TForm1::radVClick(TObject *Sender)
{
   if(radV->Checked)
   {raddown->Enabled=true;radup->Enabled=true;radleft->Enabled=false;radright->Enabled=false;}
   else {raddown->Enabled=false;radup->Enabled=false;radleft->Enabled=true;radright->Enabled=true;}
    if(radV->Checked)  radordClick(Sender);
    else
      {
    if(radgro->Checked)

   {
       if(comhor->Text.Trim()==""){ShowMessage("水平每组的点数不能为空");return;}
       BYTE  tempdata=0,temp=1,col=0,memoline=0;
      if(comnumber->Text.Trim()==""){ShowMessage("每行的数据个数不能为空");return;}
      int  hang=1,mlk=0;
     AnsiString tmn,nmk,strdata="",totalstr="DB  ";
     if(!frmasm->Checked)totalstr="";
    int mn=img->Width%8;
    int row=img->Width/8;
    int mk=StrToInt(comhor->Text);
    int group=img->Width/mk;
    if(img->Width%mk)group++;
    datamemo->Lines->Clear();
    datamemo->Lines->Add("");
    if(mn) row++;
    int n=0  ;
    int num=0;
// if(mn)row++;

  for(;n<group;n++) 
     {
 for(int j=0;j<row;j++)
     {        
     for(int i=0;(i<mk)&&(n*mk+i<img->Height);i++)
      {
     for(int m=0;(m<8)&&(j*8+m<img->Width);m++)
        {
         if((img->Canvas->Pixels[n*mk+j*8+m][i]==0))tempdata+=temp;
         temp=temp*2;  //ShowMessage(IntToStr(temp));
         }

         temp=1;
         num++;
         mlk++;

                if(radright->Checked)
                {
                  int np=0,mp=128,xmp=0,mndata=1 ;
                   for(;np<8;np++)
                        {
                        if(tempdata/mp)xmp+=mndata;
                        mndata=mndata*2;
                        tempdata=tempdata%mp;
                        mp=mp/2;
                        }
                   tempdata=xmp;
                 }
       if(rad0->Checked)tempdata=~tempdata;
       if(frmasm->Checked)
       strdata=IntToHex(tempdata,3)+"H";
       else strdata="0x"+IntToHex(tempdata,3);
       tempdata=0;
       if(col==0)totalstr=totalstr+strdata ;
       else totalstr=totalstr+","+strdata ;
        col++;// ShowMessage(totalstr);
      if(col==StrToInt(comnumber->Text)) {if(frmasm->Checked)totalstr=totalstr+"    ;";
        else totalstr=totalstr+",  //";totalstr=totalstr+"Row NO."+IntToStr(hang);hang++;  datamemo->Lines->Add(totalstr) ;col=0;strdata="";totalstr="DB  ";if(!frmasm->Checked)totalstr="";memoline++;}
      }

   // ShowMessage(IntToStr(datamemo->Lines->Count));
     }
      if(col>0)  datamemo->Lines->Add(totalstr);
      col=0;
     totalstr="DB  ";
     if(!frmasm->Checked)totalstr="";
     AnsiString strm;
     hang=1;
     strm=";"; if(!frmasm->Checked) strm="//";
     datamemo->Lines->Add(strm);
     datamemo->Lines->Add(strm+"第"+IntToStr(n+1)+"组数据结束"+"   数据个数为:"+IntToStr(num));
     datamemo->Lines->Add(strm);
     num=0;
     }
   if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(mlk)+"  每组水平点数为:"+comhor->Text+
   "       每行数据个数为:"+comnumber->Text);
    else datamemo->Lines->Add("//The number of data is "+IntToStr(mlk)+"  每组水平点数为:"+comhor->Text+"       每行数据个数为:"+comnumber->Text);
    }
   else      //不分组的情况
      {
  BYTE  tempdata=0,temp=1,col=0,memoline=0;
  if(comnumber->Text.Trim()==""){ShowMessage("每行的数据个数不能为空");return;}
  int  hang=1,mlk=0;
  AnsiString tmn,nmk,strdata="",totalstr="DB  ";
  if(!frmasm->Checked)totalstr="";
 int mn=img->Width%8;
 int row=img->Width/8;
 datamemo->Lines->Clear();
 datamemo->Lines->Add("");
  if(mn) row++;
// if(mn)row++;
// ShowMessage(IntToStr(row));


 for(int i=0;i<img->Height;i++)

     for(int j=0;j<row;j++)
     {
     for(int m=0;(m<8)&&(j*8+m<img->Width);m++)
       {
       if((img->Canvas->Pixels[j*8+m][i]==0))tempdata+=temp;
       temp=temp*2;  //ShowMessage(IntToStr(temp));
       }
       temp=1;
       mlk++;
        if(radright->Checked)
                {
                  int np=0,mp=128,xmp=0,mndata=1 ;
                   for(;np<8;np++)
                        {
                        if(tempdata/mp)xmp+=mndata;
                        mndata=mndata*2;
                        tempdata=tempdata%mp;
                        mp=mp/2;
                        }
                   tempdata=xmp;
                 }
       if(rad0->Checked)tempdata=~tempdata;
       if(frmasm->Checked)
       strdata=IntToHex(tempdata,3)+"H";
       else strdata="0x"+IntToHex(tempdata,3);
        tempdata=0;
       if(col==0)totalstr=totalstr+strdata ;
       else totalstr=totalstr+","+strdata ;
        col++;// ShowMessage(totalstr);
      if(col==StrToInt(comnumber->Text)) {if(frmasm->Checked)totalstr=totalstr+"    ;";
        else totalstr=totalstr+",  //";totalstr=totalstr+"Row NO."+IntToStr(hang);hang++;  datamemo->Lines->Add(totalstr) ;col=0;strdata="";totalstr="DB  ";if(!frmasm->Checked)totalstr="";memoline++;}
     }
    if(col>0)  datamemo->Lines->Add(totalstr);
   // if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(row*img->Width));
  //  else datamemo->Lines->Add("//The number of data is "+IntToStr(row*img->Width));

    if(frmasm->Checked) datamemo->Lines->Add(";The number of data is "+IntToStr(mlk)+"      "+
   " 每行数据个数为:"+comnumber->Text);
    else datamemo->Lines->Add("//The number of data is "+IntToStr(mlk)+"     每行数据个数为:"+comnumber->Text);
   }
   }






   }
//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -