📄 bmpchange.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 + -