📄 unit1.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
m_Flag=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
mp_Bmp=new Graphics::TBitmap();
//mp_Bmp是位图指针,它指向一个bmp图片;该句是给该位图指针分配动态内存
if(!(OpenPictureDialog1->Execute()))
return;
mp_Bmp->LoadFromFile(OpenPictureDialog1->FileName);
//mp_Bmp从OpenPictureDialog1的路径中读入图片;
Image1->Picture->Bitmap=mp_Bmp;
//Image1显示图片;
m_W=mp_Bmp->Width;
m_H=mp_Bmp->Height;
mp_Data=new BYTE[m_W*m_H];
//用mp_Data用来存储mp_Bmp中图片的像素值
if(mp_Bmp->PixelFormat==pf24bit)
//如果mp_Bmp中的图片格式是24位的
for(int y=0;y<m_H;y++)
{
mp_Str=(Byte *)(mp_Bmp->ScanLine[y]);
//让mp_Str指向mp_Bmp中图片第y行的首地址
for(int x=0;x<m_W;x++)
{
mp_Data[y*m_W+x]=(mp_Str[3*x]+mp_Str[3*x+1]+mp_Str[3*x+2])/3;
}
}
m_Flag=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
/*
for(int y=0;y<m_H;y++)
{
mp_Str=(Byte *)(mp_Bmp->ScanLine[y]);
//让mp_Str指向mp_Bmp中图片第y行的首地址
for(int x=0;x<m_W;x++)
{
//mp_Data[y*m_W+x]=(mp_Str[3*x]+mp_Str[3*x+1]+mp_Str[3*x+2])/3;
mp_Str[3*x]=mp_Data[y*m_W+x];
mp_Str[3*x+1]=mp_Data[y*m_W+x];
mp_Str[3*x+2]=mp_Data[y*m_W+x];
}
}
*/
PutDataIntoBmp24(mp_Data,mp_Bmp,mp_Str,m_W,m_H);
// Image1->Picture->Bitmap=mp_Bmp;
// Image1->Picture->Bitmap->SaveToFile("f:\\灰度图.bmp");
// mp_Bmp->SaveToFile("f:\\灰度图.bmp");
Produce_Save(Image1,mp_Bmp,OpenPictureDialog1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int mC;
/*
if(Edit1->Text=="")
{
MessageBox(NULL,"没输入临界值","出错",MB_OK);
return;
}
*/
// mC=StrToInt(Edit1->Text);
mC=TrackBar1->Position;
for(int y=0;y<m_H;y++)
for(int x=0;x<m_W;x++)
{
if(mp_Data[y*m_W+x]>mC)
mp_Data[y*m_W+x]=255;
if(mp_Data[y*m_W+x]<=mC)
mp_Data[y*m_W+x]=0;
}
/*
for(int y=0;y<m_H;y++)
{
mp_Str=(Byte *)(mp_Bmp->ScanLine[y]);
for(int x=0;x<m_W;x++)
{
//mp_Data[y*m_W+x]=(mp_Str[3*x]+mp_Str[3*x+1]+mp_Str[3*x+2])/3;
mp_Str[3*x]=mp_Data[y*m_W+x];
mp_Str[3*x+1]=mp_Data[y*m_W+x];
mp_Str[3*x+2]=mp_Data[y*m_W+x];
}
}
*/
PutDataIntoBmp24(mp_Data,mp_Bmp,mp_Str,m_W,m_H);
/*
Image1->Picture->Bitmap=mp_Bmp;
mp_Bmp->SaveToFile("f:\\二值图.bmp");
*/
Produce_Save(Image1,mp_Bmp,OpenPictureDialog1);
}
//---------------------------------------------------------------------------
bool TForm1::PutDataIntoBmp24(Byte * mpData, Graphics::TBitmap *mpBmp,BYTE *mpStr,int mW, int mH)
{
for(int y=0;y<mH;y++)
{
mpStr=(Byte *)(mpBmp->ScanLine[y]);
for(int x=0;x<mW;x++)
{
mpStr[3*x]=mpData[y*mW+x];
mpStr[3*x+1]=mpData[y*mW+x];
mpStr[3*x+2]=mpData[y*mW+x];
}
}
return true; //TODO: Add your source code here
}
bool TForm1::Produce_Save(TImage *Image,Graphics::TBitmap *mpBmp,TOpenPictureDialog *OpenPictureDialog1)
{
Image1->Picture->Bitmap=mpBmp;
mpBmp->SaveToFile(OpenPictureDialog1->FileName+"已处理");
return true;
//TODO: Add your source code here
}
void __fastcall TForm1::TrackBar1Change(TObject *Sender)
{
BYTE *mpData=new BYTE[m_W*m_H];
/*
if(Edit1->Text=="")
{
MessageBox(NULL,"没输入临界值","出错",MB_OK);
return;
}
*/
// mC=StrToInt(Edit1->Text);
mC=TrackBar1->Position;
Edit1->Text=IntToStr(mC);
for(int y=0;y<m_H;y++)
for(int x=0;x<m_W;x++)
{
if(mp_Data[y*m_W+x]>mC)
mpData[y*m_W+x]=255;
if(mp_Data[y*m_W+x]<=mC)
mpData[y*m_W+x]=0;
}
/*
for(int y=0;y<m_H;y++)
{
mp_Str=(Byte *)(mp_Bmp->ScanLine[y]);
for(int x=0;x<m_W;x++)
{
//mp_Data[y*m_W+x]=(mp_Str[3*x]+mp_Str[3*x+1]+mp_Str[3*x+2])/3;
mp_Str[3*x]=mp_Data[y*m_W+x];
mp_Str[3*x+1]=mp_Data[y*m_W+x];
mp_Str[3*x+2]=mp_Data[y*m_W+x];
}
}
*/
PutDataIntoBmp24(mpData,mp_Bmp,mp_Str,m_W,m_H);
Image1->Picture->Bitmap=mp_Bmp;
// mp_Bmp->SaveToFile("f:\\二值图.bmp");
// Produce_Save(Image1,mp_Bmp,SavePictureDialog1);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(m_Flag==true)
Label1->Caption=IntToStr(mp_Data[Y*m_W+X]);
else
return;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -