Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PictureBox 
:(
    Опции темы
PaZ1T1V
Дата 21.3.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Народ, у меня снова проблемы:((( помогите решить
 smile 
знаю, 4то один топик - один вопрос, но ....

вопрос1 

можно ли симитировать рисование кистью, наприммер как в mspaint, fotoshop & etc ???

вопрос 2

как сохранить битмап ?? (знаю 4то ета тема уже поднималась )пишу так,


Код


SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            openFileDialog1.InitialDirectory = "C:\\Temp";
            saveFileDialog1.Filter = "bitmap file (*.bmp)|*.bmp";
            saveFileDialog1.FilterIndex = 1;
            saveFileDialog1.RestoreDirectory = true;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image=new Bitmap(pictureBox1.Width,pictureBox1.Height);
                System.Drawing.Graphics w = Graphics.FromImage(pictureBox1.Image);
                pictureBox1.Invalidate();
                pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            }



 но вместо того 4то нарисовал сохраняется "черный квадрат", в прямом смысле етого слова

вопрос 3

если вызываю колор диалог или перекрываю свою форму 4ем нибудь, то все то, 4то я нарисовал пропадает, как ето исправить

Народ хелпМеПлиз(!!!)

ЗЫ модераторы сильно меня не пенайте плиз, знаю 4то нарушаю уставы форума...

                           Заранее спасибо всем принявшим у4астие в разрешении моих проблем smile)  
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
vponomarov
Дата 21.3.2008, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



ты все делаешь правильно, но есть один существенный вопрос: как же ты рисуешь? кода-то нигде нет smile 
если ты переодпределил метод Paint объекта pictureBox1, то в приведенном коде сохранения вместо pictureBox1.Invalidate(); нужно написать что-то типа pictureBox1_Paint(null, null); и все будет ок.


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 21.3.2008, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Цитата(vponomarov @ 21.3.2008,  19:01)
ты все делаешь правильно, но есть один существенный вопрос: как же ты рисуешь? кода-то нигде нет smile 
если ты переодпределил метод Paint объекта pictureBox1, то в приведенном коде сохранения вместо pictureBox1.Invalidate(); нужно написать что-то типа pictureBox1_Paint(null, null); и все будет ок.

рисую ..... хм простецки 

 private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Pen newPen = myPen;
            myGraphix = pictureBox1.CreateGraphics();
            
            if (buttonclicked == 1)
            {
                mouseX = e.X;
                mouseY = e.Y;
                penStyle();
                myGraphix.DrawLine(newPen, mouseX, mouseY, mouseX + 1, mouseY + 1);
            }
            if (buttonclicked == 3)
            {
                mouseX = e.X;
                mouseY = e.Y;
                penStyle();
                myGraphix.DrawLine(newPen, mouseX, mouseY, mouseX + 1, mouseY + 1);
                label2.Text = "X = " + mouseX.ToString();
                label3.Text = "Y = " + mouseY.ToString();
            }
        }

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Pen newPen = myPen;
            myGraphix = pictureBox1.CreateGraphics();
            
            if (buttonclicked == 1)
            {
                if (e.Button == MouseButtons.Left)
                {
                penStyle();
                myGraphix.DrawLine(newPen, mouseX, mouseY, e.X, e.Y);
                mouseX = e.X;
                mouseY = e.Y;
                label2.Text = "X = " + mouseX.ToString();
                label3.Text = "Y = " + mouseY.ToString();
                }
                
            }
        }
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
vponomarov
Дата 21.3.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



нк раз так, то по-моему нужно сохранять картинку таким образом:
Код

SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            openFileDialog1.InitialDirectory = "C:\\Temp";
            saveFileDialog1.Filter = "bitmap file (*.bmp)|*.bmp";
            saveFileDialog1.FilterIndex = 1;
            saveFileDialog1.RestoreDirectory = true;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            }



--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 21.3.2008, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



хм, так вообще дебаг вызывается счо словами 

object reference not set to an instance of an object 

то есть , помоему не находит ссылку откуда сохранять :(((
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
vponomarov
Дата 21.3.2008, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



в конструкторе формы проипиши: pictureBox1.Image=new Bitmap();
ну или что-то типа того smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 21.3.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



написал pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); , но все то же самое (, то есть сохраяет не рисунок, 4то я нарисовал а опять все тот же 4ерный квадрат  

Это сообщение отредактировал(а) PaZ1T1V - 21.3.2008, 20:08
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
vponomarov
Дата 21.3.2008, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



вот рабочий вариант:
Код

        public Form1()
        {
            InitializeComponent();

            mouseX = 0;
            mouseY = 0;

            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);
            myGraphix.Clear(Color.White);
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Pen newPen = Pens.Black;
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);//pictureBox1.Image.CreateGraphics();
            Graphics myGraphix1 = pictureBox1.CreateGraphics();
            mouseX = e.X;
            mouseY = e.Y;
            myGraphix.DrawLine(newPen, e.X, e.Y, e.X + 1, e.Y + 1);
            myGraphix1.DrawLine(newPen, e.X, e.Y, e.X + 1, e.Y + 1);
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Pen newPen = Pens.Black;
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);
            Graphics myGraphix1 = pictureBox1.CreateGraphics();
            if (e.Button == MouseButtons.Left)
            {
                myGraphix.DrawLine(newPen, mouseX, mouseY, e.X, e.Y);
                myGraphix1.DrawLine(newPen, mouseX, mouseY, e.X, e.Y);
                mouseX = e.X;
                mouseY = e.Y;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.InitialDirectory = "C:\\Temp";
            saveFileDialog1.Filter = "bitmap file (*.bmp)|*.bmp";
            saveFileDialog1.FilterIndex = 1;
            saveFileDialog1.RestoreDirectory = true;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            }
        } 

кривовато, но работает smile

Добавлено через 3 минуты и 51 секунду
о, а вот вариант по-лучше:
Код

public Form1()
        {
            InitializeComponent();

            mouseX = 0;
            mouseY = 0;

            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);
            myGraphix.Clear(Color.White);
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            Pen newPen = Pens.Black;
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);//pictureBox1.Image.CreateGraphics();
            mouseX = e.X;
            mouseY = e.Y;
            myGraphix.DrawLine(newPen, e.X, e.Y, e.X + 1, e.Y + 1);
            pictureBox1_Paint(null, null);
        }

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Pen newPen = Pens.Black;
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);
            if (e.Button == MouseButtons.Left)
            {
                myGraphix.DrawLine(newPen, mouseX, mouseY, e.X, e.Y);
                mouseX = e.X;
                mouseY = e.Y;
                pictureBox1_Paint(null, null);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.InitialDirectory = "C:\\Temp";
            saveFileDialog1.Filter = "bitmap file (*.bmp)|*.bmp";
            saveFileDialog1.FilterIndex = 1;
            saveFileDialog1.RestoreDirectory = true;

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);
            }
        }

        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            Graphics myGraphix = pictureBox1.CreateGraphics();
            myGraphix.DrawImage(pictureBox1.Image, 0, 0);
        }



--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 21.3.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



гы, не работает во ета стро4ка, 

Graphics myGraphics.FromImage(pictureBox1.Image);

дебажет со словами зна4ение не может быть равно нулю (Value cannot be null)
--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
vponomarov
Дата 21.3.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



вот это написал?
Код

public Form1()
        {
            InitializeComponent();

            mouseX = 0;
            mouseY = 0;

            pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            Graphics myGraphix = Graphics.FromImage(pictureBox1.Image);
            myGraphix.Clear(Color.White);
        }


у меня все воркает...

Добавлено через 1 минуту и 44 секунды
ты же говорил, что предыдущий пример заработал, но опять выдавал черный квадрат!


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
PaZ1T1V
Дата 21.3.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 169
Регистрация: 26.2.2008
Где: Багдад )

Репутация: нет
Всего: нет



Ура, сейв заработал, но теперь стал дебажить Лоад 

помоги еще раз плиз

вот код 

Код


private void openDialog()
        {
            pictureBox1.Image = null;
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.InitialDirectory = "C:\\Temp";
            openFileDialog1.Filter = "bitmap files (*.bmp)|*.bmp";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.RestoreDirectory = true;

            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {              
                Image myImage = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                Graphics myGraphics = Graphics.FromImage(myImage);
                Rectangle rect_dest = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
                Rectangle rect_srch = new Rectangle(0, 0, pictureBox1.Width, pictureBox1.Height);
                myGraphics.DrawImage(myImage, rect_dest, rect_srch, GraphicsUnit.Pixel);
                this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                this.pictureBox1.Image = myImage;
                pictureBox1_Paint(null,null);
            }
        }



заранее благодарен

--------------------
[size=8]Atention please!!![/size]
[size=6]Кривые руки[/size]
PM MAIL WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
rubbiroid
Дата 21.3.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 23.8.2006
Где: Германия

Репутация: 1
Всего: 1



эээ... а саму картинку кто грузить будет?
Код

Image myImage = new Bitmap(openFileDialog1.FileName);

PM MAIL   Вверх
Dennnis
Дата 24.3.2008, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 23.3.2008

Репутация: 2
Всего: 4



Лучше всего в данном случае пользоваться двойной буферизацией:

Код



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        private BufferedGraphicsContext context;
        private BufferedGraphics buffer;
        private Graphics graphics;


        public Form1()
        {
            InitializeComponent();

            context = BufferedGraphicsManager.Current;
            Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);
            buffer = context.Allocate(this.CreateGraphics(), rect);
            graphics = buffer.Graphics;
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);

        }

        private void Form1_Paint(object sender, PaintEventArgs e)
        {
            buffer.Render(e.Graphics);
        }

        private void Form1_DoubleClick(object sender, EventArgs e)
        {
            //Рисуем в graphics что угодно
            graphics.DrawRectangle(Pens.Red, 10, 10, 100, 100);
            //Обязательно
            this.Refresh();
        }

    }
}



--------------------
Get Rich or Die Tryin'
PM   Вверх
vponomarov
Дата 24.3.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 5
Всего: 12



Dennnis, двойная буфферизация вещь без сомнения хорошая, но в данном случае от нее пользы никакой smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
Dennnis
Дата 24.3.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 23.3.2008

Репутация: 2
Всего: 4



Да я просто не туда написал smile 
--------------------
Get Rich or Die Tryin'
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.