Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 12
1

Графический редактор с карандашом и ластиком

09.12.2014, 16:58. Показов 5355. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Нужно собрать графический редактор с карандашом и ластиком. Элементы я добавить смог, но не могу никак организовать работу карандаша и ластика (
Вроде пробовал организовать и с помощью PaintBox, но тоже ничего не вышло...
Может кто-нибудь помочь?

Прикрепляю архив с программой.
Граф. редактор.rar
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2014, 16:58
Ответы с готовыми решениями:

[Графический редактор] Как организовать рисование карандашом (кистью)?
Нужно реализовать Рисовать карандашом (кистью). Но я что то не пойму как это сделать.. Пример есть...

А можно в Inkscape работать ластиком как ластиком?
Я до сих пор не понимаю, тот ли странный прямоугольник я считаю ластиком. У меня привычка -...

Калькулятор, редактор списка строк, графический редактор
Калькулятор:

Калькулятор, редактор списка строк, графический редактор
Помогите, кто чем может! Очень надо,хотя бы что то из этого сделать!

6
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
10.12.2014, 02:35 2
Пример.
Вложения
Тип файла: rar Paint.rar (610.5 Кб, 190 просмотров)
1
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 12
10.12.2014, 13:38  [ТС] 3
Вот вроде почти готово, но есть проблема.
Когда выбираешь допустим карандаш, то на поле он сразу рисует линии, даже если еще не нажал кнопку мыши. Так же и с ластиком. Как это исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "Unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
// мерцание
Form1->DoubleBuffered = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MOpenClick(TObject *Sender)
{
 if (OpenPictureDialog1->Execute()) {
  Image3->Picture->LoadFromFile(OpenPictureDialog1->FileName);
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// заполнение выбранного цвета
 Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
// ширина палитры
 int HW = Image4->Width / 10;
// закраска палитры
 for(int i = 1; i <=10; i++)
  {
   switch (i)
   {
    case 1:Image4->Canvas->Brush->Color = clBlack;
           break;
    case 2:Image4->Canvas->Brush->Color = clAqua;
           break;
    case 3:Image4->Canvas->Brush->Color = clBlue;
           break;
    case 4:Image4->Canvas->Brush->Color = clFuchsia;
           break;
    case 5:Image4->Canvas->Brush->Color = clGreen;
           break;
    case 6:Image4->Canvas->Brush->Color = clLime;
           break;
    case 7:Image4->Canvas->Brush->Color = clMaroon;
           break;
    case 8:Image4->Canvas->Brush->Color = clRed;
           break;
    case 9:Image4->Canvas->Brush->Color = clYellow;
           break;
    case 10:Image4->Canvas->Brush->Color = clWhite;
   }
   Image4->Canvas->Rectangle((i-1)*HW,0,i*HW,Image4->Height);
  }
// для холста
   Image3->Canvas->MoveTo(0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image3MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
if((Sender == Image4))
 {
  if(Button == mbLeft)
  {
// основной цвет
    Image1->Canvas->Brush->Color = ((TImage *)Sender)->Canvas->Pixels[X][Y];
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
  }
 }
else
{
 
  if (SBPen->Down)
  {
// карандаш
    Image3->Canvas->MoveTo(X,Y);
    Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;
  }
  else if (SBErase->Down)
  {
// ластик
    R = Rect(X-6,Y-6,X+6,Y+6);
    Image3->Canvas->DrawFocusRect(R);
    Image3->Canvas->Brush->Color=clWhite;
    Image3->Canvas->FillRect(Rect(X-5,Y-5,X+5,Y+5));
   }
    }
   }
//---------------------------------------------------------------------------
void __fastcall TForm1::UndoClick(TObject *Sender)
{
 Image3->Picture->Assign(BitMap);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 BitMap->Free();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SBBrushClick(TObject *Sender)
{
 if (((TSpeedButton *)Sender)->Down)
  BitMap->Assign(Image3->Picture);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image3MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 if (SBPen->Down)
 Image3->Canvas->LineTo(X,Y);
 else if (SBErase->Down)
   {
// ластик
    Image3->Canvas->DrawFocusRect(R);
    R = Rect(X-6,Y-6,X+6,Y+6);
    Image3->Canvas->DrawFocusRect(R);
    Image3->Canvas->FillRect(Rect(X-5,Y-5,X+5,Y+5));
  }}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image3MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{if (SBErase->Down) Image3->Canvas->DrawFocusRect(R);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MSaveClick(TObject *Sender)
{
 if (SavePictureDialog1->Execute())
  {
    BitMap->Assign(Image3->Picture);
    BitMap->SaveToFile(SavePictureDialog1->FileName);
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
0
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
10.12.2014, 17:22 4
Скинь весь проект.
1
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 12
10.12.2014, 17:28  [ТС] 5
Вот проект. Arantsev (графический редактор).rar
0
случайный прохожий
2934 / 1951 / 606
Регистрация: 20.07.2013
Сообщений: 5,160
10.12.2014, 17:52 6
Лучший ответ Сообщение было отмечено Han_Koh как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "Unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
// мерцание
Form1->DoubleBuffered = true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MOpenClick(TObject *Sender)
{
 if (OpenPictureDialog1->Execute()) {
  Image3->Picture->LoadFromFile(OpenPictureDialog1->FileName);
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
// заполнение выбранного цвета
 Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
// ширина палитры
 int HW = Image2->Width / 10;
// закраска палитры
 for(int i = 1; i <=10; i++)
  {
   switch (i)
   {
    case 1:Image2->Canvas->Brush->Color = clBlack;
           break;
    case 2:Image2->Canvas->Brush->Color = clAqua;
           break;
    case 3:Image2->Canvas->Brush->Color = clBlue;
           break;
    case 4:Image2->Canvas->Brush->Color = clFuchsia;
           break;
    case 5:Image2->Canvas->Brush->Color = clGreen;
           break;
    case 6:Image2->Canvas->Brush->Color = clLime;
           break;
    case 7:Image2->Canvas->Brush->Color = clMaroon;
           break;
    case 8:Image2->Canvas->Brush->Color = clRed;
           break;
    case 9:Image2->Canvas->Brush->Color = clYellow;
           break;
    case 10:Image2->Canvas->Brush->Color = clWhite;
   }
   Image2->Canvas->Rectangle((i-1)*HW,0,i*HW,Image2->Height);
  }
// для холста
   Image3->Canvas->MoveTo(0,0);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image3MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
  if(Button == mbLeft)
    Tag = 1;  // если нажата левая кнопка мыши, то включаем режим рисования
 
if((Sender == Image2))
 {
  if(Button == mbLeft)
  {
    Tag = 0;  // после смены цвета отключаем режим рисования
// основной цвет
    Image1->Canvas->Brush->Color = ((TImage *)Sender)->Canvas->Pixels[X][Y];
    Image1->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));
  }}
else
{
  if (SBPen->Down)
  {
// карандаш
    Image3->Canvas->MoveTo(X,Y);
    Image3->Canvas->Pen->Color = Image1->Canvas->Brush->Color;
  }
  else if (SBErase->Down)
  {
// ластик
    R = Rect(X-6,Y-6,X+6,Y+6);
    Image3->Canvas->DrawFocusRect(R);
    Image3->Canvas->Brush->Color=clWhite;
    Image3->Canvas->FillRect(Rect(X-5,Y-5,X+5,Y+5));
   }
    }
   }
//---------------------------------------------------------------------------
void __fastcall TForm1::UndoClick(TObject *Sender)
{
 Image3->Picture->Assign(BitMap);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
 BitMap->Free();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::SBBrushClick(TObject *Sender)
{
 if (((TSpeedButton *)Sender)->Down)
  BitMap->Assign(Image3->Picture);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image3MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 if (Tag == 1)  // если режим рисования включен
 {
 if (SBPen->Down)
 Image3->Canvas->LineTo(X,Y);
 else if (SBErase->Down)
   {
// ластик
    Image3->Canvas->DrawFocusRect(R);
    R = Rect(X-6,Y-6,X+6,Y+6);
    Image3->Canvas->DrawFocusRect(R);
    Image3->Canvas->FillRect(Rect(X-5,Y-5,X+5,Y+5));
  }
 }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Image3MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{if (SBErase->Down) Image3->Canvas->DrawFocusRect(R);
  Tag = 0;  // отключаем режим рисования
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::MSaveClick(TObject *Sender)
{
 if (SavePictureDialog1->Execute())
  {
    BitMap->Assign(Image3->Picture);
    BitMap->SaveToFile(SavePictureDialog1->FileName);
  }
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::N1Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 09.12.2014
Сообщений: 12
10.12.2014, 22:33  [ТС] 7
gunslinger, большое спасибо! Теперь все как нужно работает
0
10.12.2014, 22:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2014, 22:33
Помогаю со студенческими работами здесь

графический редактор
помогите пожалуйста)))мне курсовик надо сделать...тема-графический редактор(((((я программу...

графический редактор
Очень большая просьба:кто-нибудь может сделать нормально работающий, простой графический...

Графический редактор в Qt
Необходимо создать что-то вроде графического редактора. Смысл состоит в следующем: существует...

Графический редактор
Всем привет! Надо написать графический редактор на C# ( курсовая работа ) Минимальный набор...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru