📄 unit1.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#define MIN(A,B) (A<B)?A:B
#define MAX(A,B) (A>B)?A:B
#include "Unit1.h"
#include "About.h"
#include <printers.hpp>
#include <Clipbrd.hpp>
#include "bmpdlg.h"
#include "bmpdlg2.h"
#include "fontdlg.h"
#include "color.h"
#include <stdlib.h>
#include <math.h>
#include <jpeg.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CGRID"
#pragma link "CSPIN"
#pragma resource "*.dfm"
TMainForm *MainForm;
//---------------------------------------------------------------------------
__fastcall TMainForm::TMainForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ColorGrid1Change(TObject *Sender)
{
FGShape->Brush->Color = ColorGrid1->ForegroundColor;
if (FGShape->Brush->Color == TColor(clBlack))
FGShape->Pen->Color = TColor(clWhite);
else
FGShape->Pen->Color = TColor(clBlack);
BGShape->Brush->Color = ColorGrid1->BackgroundColor;
if (BGShape->Brush->Color == TColor(clBlack))
BGShape->Pen->Color = TColor(clWhite);
else
BGShape->Pen->Color = TColor(clBlack);
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::FormCreate(TObject *Sender)
{
Screen->Cursors[crFill] = LoadCursorFromFile("FILL.cur");
Screen->Cursors[crPlus] = LoadCursorFromFile("PLUS.cur");
Screen->Cursors[crDraw] = LoadCursorFromFile("DRAW.cur");
Screen->Cursors[crErase] = LoadCursorFromFile("ERASE.cur");
Screen->Cursors[crText] = LoadCursorFromFile("TEXT.cur");
Screen->Cursors[crZoom] = LoadCursorFromFile("ZOOM.cur");
Image->Cursor=TCursor(crPlus);
Image->Canvas->MoveTo(0,0);
ToolState=dtSelect;
randomize();
Image->Canvas->Pen->Width=PenWidth->Value;
Image->Canvas->Pen->Style=psSolid;
Image->Canvas->Brush->Style=bsSolid;
isSelect=false;
OpenDialog1->Filter = GraphicFilter(__classid(TGraphic));
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::O1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
{
CurrentFile = OpenDialog1->FileName;
if (ExtractFileExt(OpenDialog1->FileName)==".jpg")
{
TJPEGImage *JpegImage1=new TJPEGImage();
Graphics::TBitmap *Bit=new Graphics::TBitmap();
JpegImage1->LoadFromFile(CurrentFile);
Bit->Width = JpegImage1->Width ;
// 使 位 图 与JPEG 图 像 尺 寸 相 等
Bit->Height = JpegImage1->Height ;
Bit->Canvas->StretchDraw(Rect
(0,0,Bit->Width,Bit->Height),JpegImage1);
Image->Picture->Graphic=Bit;
delete JpegImage1;
delete Bit;
}
else
Image->Picture->LoadFromFile(CurrentFile);
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ImageMouseMove(TObject *Sender,
TShiftState Shift, int X, int Y)
{
TVarRec tempvar[2] = {X, Y};
StatusBar1->Panels->Items[1]->Text
= Format("当前位置: (%d, %d)", tempvar, 2);
if (!Shift.Contains(ssLeft))
return;
switch (ToolState){
case dtPencil:
Image->Canvas->LineTo(X,Y);
break;
case dtBrush:
Image->Canvas->LineTo(X,Y);
break;
case dtErase:
Image->Canvas->LineTo(X,Y);
break;
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect:
case dtSolidRect:
case dtSolidEllipse:
case dtSolidRndRect:
DrawShape(Origin, MovePt,pmNotXor);
MovePt = Point(X, Y);
DrawShape(Origin, MovePt,pmNotXor);
break;
case dtSelect:
DrawShape(Origin, MovePt,pmNotXor);
MovePt = Point(X, Y);
DrawShape(Origin, MovePt,pmNotXor);
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::T1Click(TObject *Sender)
{
EraseSelect();
C1Click(Sender);
Image->Canvas->CopyMode = cmWhiteness;
Image->Canvas->CopyRect(SelectRect, Image->Canvas, SelectRect);
Image->Canvas->CopyMode = cmSrcCopy;
T1->Enabled=false;
C1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::C1Click(TObject *Sender)
{
EraseSelect();
Graphics::TBitmap *tmpBitmap;
tmpBitmap = new Graphics::TBitmap();
tmpBitmap->Width=SelectRect.Right-SelectRect.Left;
tmpBitmap->Height=SelectRect.Bottom-SelectRect.Top;
tmpBitmap->Canvas->CopyRect(
TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
Image->Canvas,SelectRect);
Clipboard()->Assign(tmpBitmap);
delete tmpBitmap;
T1->Enabled=false;
C1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::N3Click(TObject *Sender)
{
Graphics::TBitmap *tmpBitmap;
if (Clipboard()->HasFormat(CF_BITMAP)){
tmpBitmap = new Graphics::TBitmap();
try{
tmpBitmap->Assign(Clipboard());
Image->Canvas->Draw(0, 0, tmpBitmap);
delete tmpBitmap;
}
catch(...){
delete tmpBitmap;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::T2Click(TObject *Sender)
{
if (T2->Checked){
T2->Checked=false;
CoolBar1->Width=0;
}
else {
T2->Checked=true;
CoolBar1->Width=53;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::C2Click(TObject *Sender)
{
if (C2->Checked){
C2->Checked=false;
Panel1->Visible=false;
}
else {
C2->Checked=true;
Panel1->Visible=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::N4Click(TObject *Sender)
{
if (N4->Checked)
N4->Checked=false;
else
N4->Checked=true;
StatusBar1->Visible=N4->Checked;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::BCBA1Click(TObject *Sender)
{
AboutBox->Show();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::X1Click(TObject *Sender)
{
this->Close();
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ImageMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TVarRec tempvar[2] = {X, Y};
Graphics::TBitmap *tmpBitmap;
if (ToolState==dtFill)
{
if (Button == mbLeft)
Image->Canvas->Brush->Color
= FGShape->Brush->Color;
else
Image->Canvas->Brush->Color
= BGShape->Brush->Color;
Image->Canvas->FloodFill(X, Y, Image1->Canvas->Pixels[X][Y], fsSurface);
return;
}
//只有填充需要处理鼠标右键,右键用于使用被景色填充。
if (Button != mbLeft)
return;
switch (ToolState){
case dtPencil:
Image->Canvas->Pen->Width=1;
Image->Canvas->Pen->Color = FGShape->Brush->Color;
Image->Canvas->Brush->Color = BGShape->Brush->Color;
Image->Canvas->MoveTo(X,Y);
break;
case dtBrush:
Image->Canvas->Pen->Color = FGShape->Brush->Color;
Image->Canvas->Brush->Color = BGShape->Brush->Color;
Image->Canvas->MoveTo(X,Y);
break;
case dtErase:
Image->Canvas->Pen->Color = BGShape->Brush->Color;
Image->Canvas->Brush->Color = BGShape->Brush->Color;
Image->Canvas->Pen->Width = 13;
Image->Canvas->MoveTo(X,Y);
break;
case dtText:
if (FontForm->ShowModal() == IDOK){
Image->Canvas->Font
=FontForm->FontDialog1->Font;
Image->Canvas->TextOut(X,Y,FontForm->Edit1->Text);
}
break;
case dtFog:
for (int i=0;i<FogSize*FogSize/8;i++){
Image->Canvas->
Pixels[X+random(FogSize)][Y+random(FogSize)]
=FGShape->Brush->Color;
}
break;
case dtSolidRect:
case dtSolidEllipse:
case dtSolidRndRect:
Image->Canvas->Brush->Color = FGShape->Brush->Color;
Image->Canvas->Pen->Color = FGShape->Brush->Color;
Image->Canvas->Brush->Style=bsSolid;
Origin = Point(X, Y);
StatusBar1->Panels->Items[0]->Text =
Format("起点位置: (%d, %d)", tempvar, 2);
MovePt = Origin;
break;
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect:
Image->Canvas->Brush->Style=bsClear;
Image->Canvas->Pen->Color = FGShape->Brush->Color;
Origin = Point(X, Y);
StatusBar1->Panels->Items[0]->Text =
Format("起点位置: (%d, %d)", tempvar, 2);
MovePt = Origin;
break;
case dtZoomOut:
tmpBitmap = new Graphics::TBitmap();
tmpBitmap->Width = Image->Picture->Width*ZoomSize;
tmpBitmap->Height = Image->Picture->Height*ZoomSize;
tmpBitmap->Canvas->StretchDraw
(TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
Image->Picture->Graphic);
Image->Picture->Graphic = tmpBitmap;
delete tmpBitmap;
break;
case dtZoomIn:
tmpBitmap = new Graphics::TBitmap();
tmpBitmap->Width = Image->Picture->Width/ZoomSize;
tmpBitmap->Height = Image->Picture->Height/ZoomSize;
tmpBitmap->Canvas->StretchDraw
(TRect(0,0,tmpBitmap->Width,tmpBitmap->Height),
Image->Picture->Graphic);
Image->Picture->Graphic = tmpBitmap;
delete tmpBitmap;
break;
case dtSelect:
EraseSelect();
Image->Canvas->Brush->Style=bsClear;
Image->Canvas->Pen->Style = psDot;
Image->Canvas->Pen->Width = 1;
Origin = Point(X, Y);
MovePt = Origin;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::ImageMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button != mbLeft)
return;
switch (ToolState){
case dtPencil:
Image->Canvas->Pen->Width=PenWidth->Value;
break;
case dtErase:
Image->Canvas->Pen->Width=PenWidth->Value;
break;
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect:
case dtSolidRect:
case dtSolidEllipse:
case dtSolidRndRect:
DrawShape(Origin, Point(X, Y), pmCopy);
Image->Canvas->Brush->Style=bsSolid;
Image->Canvas->Brush->Color=
BGShape->Brush->Color;
break;
case dtSelect:
Image->Canvas->Brush->Style=bsSolid;
Image->Canvas->Pen->Width=PenWidth->Value;
Image->Canvas->Pen->Style = psSolid;
MovePt=Point(X,Y);
isSelect=true;
SelectRect=(TRect(Origin, MovePt));
T1->Enabled=true;
C1->Enabled=true;
break;
}
}
//---------------------------------------------------------------------------
//选取铅笔
void __fastcall TMainForm::SpeedButton1Click(TObject *Sender)
{
EraseSelect();
ToolState=dtPencil;
Image->Cursor=TCursor(crDraw);
}
//---------------------------------------------------------------------------
// 区域选取
void __fastcall TMainForm::SpeedButton4Click(TObject *Sender)
{
ToolState=dtSelect;
Image->Cursor=TCursor(crPlus);
isSelect=false;
}
//---------------------------------------------------------------------------
//图形放大
void __fastcall TMainForm::SpeedButton2Click(TObject *Sender)
{
EraseSelect();
ToolState=dtZoomOut;
Image->Cursor=TCursor(crZoom);
}
//---------------------------------------------------------------------------
//图形缩小
void __fastcall TMainForm::SpeedButton3Click(TObject *Sender)
{
EraseSelect();
ToolState=dtZoomIn;
Image->Cursor=TCursor(crZoom);
}
//---------------------------------------------------------------------------
//画刷选取
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -