📄 shiyan1.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "jpeg.hpp"
#include "shiyan1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{ Image1->Canvas->MoveTo(0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OCtrlO1Click(TObject *Sender)
{ if(OpenPictureDialog1->Execute())
{
CurrentFile=OpenPictureDialog1->FileName;
if(ExtractFileExt(OpenPictureDialog1->FileName)==".jpg")
{ TJPEGImage *JP=new TJPEGImage();
Graphics::TBitmap *Bit=new Graphics::TBitmap();
JP->LoadFromFile(CurrentFile);
Bit->Width=JP->Width;
Bit->Height=JP->Height;
Bit->Canvas->StretchDraw(Rect(0,0,Bit->Width,Bit->Height),JP);
Image1->Picture->Graphic=Bit;
delete JP;
delete Bit;
}
else
{ Image1->Picture->LoadFromFile(CurrentFile); }
Form1->Caption=CurrentFile+"画图";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SCtrlS1Click(TObject *Sender)
{
if(CurrentFile!=EmptyStr)
{Image1->Picture->SaveToFile(CurrentFile);
}
else {A1Click(Sender);}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::A1Click(TObject *Sender)
{
if(SavePictureDialog1->Execute())
{CurrentFile=SavePictureDialog1->FileName;
SCtrlS1Click(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton11Click(TObject *Sender)
{ DrawingTool=dtLine;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton13Click(TObject *Sender)
{ DrawingTool=dtRectangle;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton15Click(TObject *Sender)
{ DrawingTool=dtEllipse;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
//void __fastcall TForm1::Image1MouseUp(TObject *Sender,TMouseButton Button,TShiftState Shift,int X,int Y)
//{
//x=X;oy=Y;
//switch(sort)
//{
// case 1:
// Image1->Canvas->MoveTo(ox,oy);
// Image1->Canvas->LineTo(X,Y);
/// break;
// case 2:
// Image1->Canvas->Rectangle(ox,oy,X,Y);
// break;
//case 3:
// Image1->Canvas->Ellipse(ox,oy,X,Y);
// break;
//}
//}
void __fastcall TForm1::SpeedButton16Click(TObject *Sender)
{ DrawingTool=dtRoundRect;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton7Click(TObject *Sender)
{
DrawingTool=dtPencil;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton8Click(TObject *Sender)
{
DrawingTool=dtBrush;
Edit1->Enabled=false;
Edit1->Visible=false;
}
//---------------------------------------------------------------------------
void _fastcall TForm1::NoSelect()
{
if (Selecting){
Image1->Canvas->Brush->Style =bsClear;
Image1->Canvas->Pen->Style =psDot;
Image1->Canvas->Pen->Width =1;
Selecting=False;
DrawShape(Origin,MovePt,pmNotXor);
}
}
void __fastcall TForm1::DrawShape(TPoint TopLeft, TPoint BottomRight, TPenMode AMode)
{
Image1->Canvas->Pen->Mode = AMode;
Image1->Canvas->Brush->Style=bsClear;
switch (DrawingTool){
case dtLine : {
Image1->Canvas->MoveTo(TopLeft.x, TopLeft.y);
Image1->Canvas->LineTo(BottomRight.x,BottomRight.y);
break;
}
case dtRectangle :
case dtSelect:
{
Image1->Canvas->Rectangle(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y);
break;
}
case dtEllipse : {
Image1->Canvas->Ellipse(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y);
break;
}
case dtRoundRect : {
Image1->Canvas->RoundRect(TopLeft.x, TopLeft.y, BottomRight.x, BottomRight.y, (TopLeft.x - BottomRight.x)/2, (TopLeft.y - BottomRight.y)/2);
break;
}
}
}
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
Drawing=True;
switch(DrawingTool){
case dtPencil:{
if (Button!=mbLeft)
return;
Image1->Canvas->Pen->Width=1;
Image1->Canvas->Pen->Color=Panel7->Color ;
Image1->Canvas->Brush->Color =Panel6->Color ;
Image1->Canvas->MoveTo(X,Y);
break;}
case dtBrush:{
if (Button!=mbLeft)
return;
Image1->Canvas->Pen->Width=4;
Image1->Canvas->Pen->Color=Panel7->Color ;
Image1->Canvas->Brush->Color =Panel6->Color ;
Image1->Canvas->MoveTo(X,Y);
break;}
case dtErase:{
if (Button!=mbLeft)
return;
Image1->Canvas->Pen->Width=3;
Image1->Canvas->Pen->Color=Panel6->Color ;
Image1->Canvas->Brush->Color =Panel6->Color ;
Image1->Canvas->MoveTo(X,Y);
Origin=Point(X,Y);
MovePt=Origin;
break;}
case dtFill:{
if(Button==mbLeft)
Image1->Canvas->Brush->Color=Panel7->Color ;
else {
Image1->Canvas->Brush->Color =Panel6->Color ; }
Image1->Canvas->FloodFill(X,Y,Image1->Canvas->Pixels[X][Y],fsSurface);
break;
}
case dtFog:{
for(int i=0;i<Size*Size/16;i++){
Image1->Canvas->Pixels [X+random(Size)][Y+random(Size)]=Panel7->Color;
}
break;
}
case dtSelect: {
NoSelect() ;
Image1->Canvas->Brush->Style =bsClear;
Image1->Canvas->Pen->Style =psDot;
Origin=Point(X,Y);
MovePt=Origin;
Image1->Canvas->Pen->Color =Panel7->Color ;
break; }
case dtSoak:{
if(Button==mbLeft) {
Panel7->Color=Image1->Canvas->Pixels [X][Y];}
else{
Panel6->Color =Image1->Canvas->Pixels [X][Y]; }
break;
}
case dtText:{
if(X<Image1->Width-Edit1->Width&&Y<Image1->Height-Edit1->Height)
{
Image1->Canvas->TextOutA( Edit1->Left-Image1->Left,Edit1->Top-Image1->Top,Edit1->Text) ;
Edit1->Clear();
Edit1->Top=Y+Image1->Top;
Edit1->Left=X+Image1->Left;
}
break;}
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect:
{
Image1->Canvas->MoveTo(X,Y);
Origin=Point(X,Y);
MovePt=Origin;
TVarRec tempvar[2]={X,Y};
StatusBar1->Panels->Items[0]->Text =Format("Position:(%d,%d)",tempvar,2);
Image1->Canvas->Pen->Color =Panel7->Color ;
Image1->Canvas->Brush->Color =Panel6->Color ;
break;
}
case dtPoly: {
MovePt=Point(X,Y);
if(fp) {
PrePt=Point(X,Y);
Origin=PrePt;
Image1->Canvas->MoveTo(X,Y);
fp=false;
}
else{
Image1->Canvas->Pen->Mode=pmCopy;
Image1->Canvas->LineTo(MovePt.x, MovePt.y);
}
break;
}
case dtmagnify:
{
if(Button==mbLeft)
{
Graphics::TBitmap *bm=new Graphics::TBitmap();
bm->Width=Image1->Picture->Width*1.2;
bm->Height=Image1->Picture->Height*1.2;
bm->Canvas->StretchDraw(TRect(0,0,bm->Width,bm->Height),Image1->Picture->Graphic);
Image1->Picture->Graphic=bm;
delete bm;
}
else
{
Graphics::TBitmap *bm=new Graphics::TBitmap();
bm->Width=Image1->Picture->Width/1.2;
bm->Height=Image1->Picture->Height/1.2;
bm->Canvas->StretchDraw(TRect(0,0,bm->Width,bm->Height),Image1->Picture->Graphic);
Image1->Picture->Graphic=bm;
delete bm;
}
}
}
TVarRec tempvar[2] = {X, Y};
StatusBar1->Panels->Items[0]->Text = Format("Start: (%d, %d)", tempvar, 2);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
if(Drawing){
switch (DrawingTool){
case dtPencil:
case dtBrush:
case dtErase:
Image1->Canvas->LineTo(X,Y);
break;
case dtSelect:
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect: {
DrawShape(Origin,MovePt,pmNotXor);
MovePt=Point(X,Y);
DrawShape(Origin,MovePt,pmNotXor);
break;}
case dtPoly:
{ if(fp)
{
Image1->Canvas->Pen->Mode=pmNotXor;
Image1->Canvas->MoveTo(PrePt.x ,PrePt.y );
Image1->Canvas->LineTo(X,Y);
PrePt=Point(X,Y);
Image1->Canvas->Pen->Mode=pmNotXor;
Image1->Canvas->MoveTo(PrePt.x ,PrePt.y );
Image1->Canvas->LineTo(X,Y);
}
break;
}
}
TVarRec tempvar[2] = {X, Y};
StatusBar1->Panels->Items[1]->Text = Format("Current: (%d, %d)", tempvar, 2);
} }
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
TShiftState Shift, int X, int Y)
{
if(Drawing){
if (Button!=mbLeft)
return;
switch (DrawingTool){
case dtPencil:
{Image1->Canvas->Pen->Width =1;
break;}
case dtErase:
{Image1->Canvas->Pen->Width =1;
break;}
case dtBrush:
{Image1->Canvas->Pen->Width=1;break;}
case dtSelect :{
Image1->Canvas->Brush->Style =bsSolid;
Image1->Canvas->Pen->Width =1;
Image1->Canvas->Pen->Style =psSolid;
MovePt=Point(X,Y);
Selecting=true;
selectrect=(TRect(Origin,MovePt)) ;
break;
}
case dtPoly: {
if(fp)
{
Image1->Canvas->Pen->Mode =pmCopy;
Image1->Canvas->MoveTo(PrePt.x ,PrePt.y );
Image1->Canvas->LineTo(X,Y);
}
PrePt=Point(X,Y);
if(!np)
{fp=true;
np=true;
}
break;
}
case dtLine:
case dtRectangle:
case dtEllipse:
case dtRoundRect:
{DrawShape(Origin,Point(X,Y),pmCopy);
break;
}
}
Drawing=False;
} }
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel10MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
if (Button==mbLeft)
Panel7->Color=Panel10->Color;
else
Panel6->Color=Panel10->Color;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -