Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Злой_дед
1 / 1 / 2
Регистрация: 25.02.2014
Сообщений: 120
1

Ластик не работает на bmp картинках

05.04.2015, 20:48. Просмотров 319. Ответов 0
Метки нет (Все метки)

когда переводишь изображение в
C#
1
Image<Bgr, byte>((Bitmap)image))
, бинаризируешь его и затем
переводишь обратно
C#
1
return Image<Bgr, byte>.ToBitmap();
при использовании "ластика" пишет ошибку
Ошибка-невозможно создать объект графики из изображения,имеющий индексированный формат пикселей? то есть заливка белым фоном не работает. Ошибку выдаёт,когда опускаешь кнопку мыши при заливке в третьей строчке на слове pictureBox1.Image. Скорее всего не в тот формат отрисовывается.

C#
1
2
3
4
5
6
7
8
 private void pictureBox1_MouseUp_1(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            g.FillEllipse(whiteBrush, rect1);
            g.Save();
           
            
        }
Код полностью
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
 
namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
 
        Point m1_PanStartPoint;
        Boolean DrawEllipse = false;
        Rectangle rect1;
        int DrawEllipse_Mouse_X_Start;
        int DrawEllipse_Mouse_Y_Start;
        int DrawEllipse_Mouse_X_End;
        int DrawEllipse_Mouse_Y_End;
        Pen pen = new Pen(Brushes.Blue, 0.8f) { DashStyle = System.Drawing.Drawing2D.DashStyle.Dash };
        SolidBrush whiteBrush = new SolidBrush(Color.White);      
        
        public Form1()
        {
            InitializeComponent();
        }
 
        
   private void button1_Click(object sender, EventArgs e)
        {
 
            this.openFileDialog1.Filter = "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|" + "All files (*.*)|*.*";
            DialogResult dr = this.openFileDialog1.ShowDialog();
            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                pictureBox1.Image = new Bitmap(openFileDialog1.FileName); //Основное изображение.
 
            }
        }
 
   private void selectToolStripMenuItem_Click_1(object sender, EventArgs e)
   {
            if (selectToolStripMenuItem.Checked == true)
            {
                selectToolStripMenuItem.Checked = false;
                DrawEllipse = false;
                pictureBox1.Invalidate();
                pictureBox1.Cursor = Cursors.Default;
             
            }
            else
            {
                selectToolStripMenuItem.Checked = true;                
                pictureBox1.Cursor = Cursors.Cross;                
 
            }
        }
 
        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (pictureBox1.Cursor == Cursors.Cross)
            {
                DrawEllipse = true;
                DrawEllipse_Mouse_X_Start = e.Location.X;
                DrawEllipse_Mouse_Y_Start = e.Location.Y;
                DrawEllipse_Mouse_X_End = e.Location.X + 1;
                DrawEllipse_Mouse_Y_End = e.Location.Y + 1;
            }
            if (pictureBox1.Cursor == Cursors.Hand)
            {
                m1_PanStartPoint = new Point(e.X, e.Y);
            }
        }
 
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (pictureBox1.Cursor == Cursors.Cross && e.Button == MouseButtons.Left)
            {
                DrawEllipse_Mouse_X_End = e.Location.X;
                DrawEllipse_Mouse_Y_End = e.Location.Y;
                pictureBox1.Refresh();
 
            }
            if (pictureBox1.Cursor == Cursors.Hand && e.Button == MouseButtons.Left)
            {
                int DeltaX;
                int DeltaY;
                DeltaX = (m1_PanStartPoint.X - e.X);
                DeltaY = (m1_PanStartPoint.Y - e.Y);
                tabPage1.AutoScrollPosition = new System.Drawing.Point((DeltaX - tabPage1.AutoScrollPosition.X), (DeltaY - tabPage1.AutoScrollPosition.Y));
            }
        }
 
       
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            if (DrawEllipse)
            {
                int MouseX;
                int MouseY;
                MouseX = DrawEllipse_Mouse_X_End - DrawEllipse_Mouse_X_Start;
                MouseY = DrawEllipse_Mouse_Y_End - DrawEllipse_Mouse_Y_Start;
 
                //Up and Left
                if (MouseX < 0 && MouseY < 0)
                {
                    rect1 = new Rectangle((new Point(DrawEllipse_Mouse_X_End, DrawEllipse_Mouse_Y_End)), new Size(System.Math.Abs(MouseX), System.Math.Abs(MouseY)));
                }
 
                //Down and Right
 
                if (MouseX > 0 && MouseY > 0)
                {
                    rect1 = new Rectangle((new Point(DrawEllipse_Mouse_X_Start, DrawEllipse_Mouse_Y_Start)), new Size((MouseX), (MouseY)));
                }
 
                //Up and Right
                if (MouseX < 0 && MouseY > 0)
                {
                    rect1 = new Rectangle((new Point(DrawEllipse_Mouse_X_End, DrawEllipse_Mouse_Y_Start)), new Size(System.Math.Abs(MouseX), MouseY));
                }
 
                //Down and Left
                if (MouseX > 0 && MouseY < 0)
                {
                    rect1 = new Rectangle((new Point(DrawEllipse_Mouse_X_Start,DrawEllipse_Mouse_Y_End)), new Size(MouseX, System.Math.Abs(MouseY)));
                }
                try
                {
                    e.Graphics.FillEllipse(whiteBrush, rect1);
                }
                catch (Exception) { }
            }
        }
 
        private void pictureBox1_MouseUp_1(object sender, MouseEventArgs e)
        {
            Graphics g = Graphics.FromImage(pictureBox1.Image);
            g.FillEllipse(whiteBrush, rect1);
            g.Save();
           
            
        }
 
        
 
 
    }
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2015, 20:48
Ответы с готовыми решениями:

ластик(графический редактор)
Здравствуйте,делаю графический редактор на шарпе не знаю как сделать ластик(вариант просто...

Ластик как в Paint
Здравствуйте. Подскажите, пожалуйста, как сделать в C# что-то на подобии ластика

Реализовать ластик в графическом редакторе
Как сделать ластик(стирачку) потипу как в пейнте(водиш мышкой и оно стирает всё на что попало)

Как сделать ластик в графическом редакторе
Доброго.. :) Подскажите, пожалуйста, как же сделать инструмент &quot;ластик&quot; в графическом редакторе.....

Графический редактор - реализовать масштаб и ластик
Кто подскажет как реализовать такие функции в графическом редакторе как: стирачка, увеличение...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2015, 20:48

Найти отличия в двух картинках
Дано форма, 3 pictureBox(в 2 загружены картинки), кнопка. Надо пройтись по всем пикселам картинок...

Не работает ластик
unit Unit4; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

Ластик
Как создать ластик, чтобы он при проведении ним по определенной области стирал все на ней. Вот в...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru