none
[Graphics] Recuperando desenho RRS feed

  • Pergunta

  • Olá, pessoal! Estou criando um aplicação de desenho e quero implementar a mudança da cor de fundo, mas sem que

    o desenho já feito seja perdido. 

    Por exemplo, ao clicar no botão e mudar a cor do fundo, queria que o desenho já feito continuasse na tela. É possível?

    quarta-feira, 15 de março de 2017 03:32

Respostas

  • Bom dia,

    Por gentileza, verifique se esse exemplo o ajuda:

    Image image = Image.FromFile("minhaImagem.png");
    
    Bitmap bmp = new Bitmap(image.Width, image.Height);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        g.Clear(Color.SkyBlue);
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.PixelOffsetMode = PixelOffsetMode.None;
        g.DrawImage(image, Point.Empty);
    }
    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 16 de março de 2017 14:00
    Moderador

Todas as Respostas

  • Bom dia,

    O que você já desenvolveu até o momento?

    Em qual parte do código exatamente está a sua dúvida?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quarta-feira, 15 de março de 2017 12:51
    Moderador
  • aí vai o código do form que tem a tela de desenho

                                                                   

    using System;
    using System.Drawing;
    using System.Windows.Forms;

    namespace TelaDeDesenho
    {
        public partial class Form1 : Form
        {

            // Determina quando pode pintar na tela
            bool pinta = false;
            // Parâmetros padrão
            int espessuraPadrao = 4;
            Color cor = Color.Blue;
            int espessura;

            Graphics graf;


            public Form1()
            {
                InitializeComponent();
                // Setando espessura padrão
                espessura = espessuraPadrao;
                textBoxEspessura.Text = espessura.ToString();

                radioButtonCaneta.Checked = true;
                // Cor padrãos da caneta
                buttonCorCaneta.BackColor = cor;
                // Criando o controle graf, responsável pelo desenho
                // sobre o painel
                graf = painelDeDesenho.CreateGraphics();
            }
            // Quando está pressionado, deve pintar
            private void painelDeDesenho_MouseDown(object sender, MouseEventArgs e)
            {
                // habilita a pintura
                pinta = true;
                // atualiza a espessura
                espessura = RetornaEspessura();
                textBoxEspessura.Text = espessura.ToString();
            }

            // Quando é liberado, deve parar de pintar
            private void painelDeDesenho_MouseUp(object sender, MouseEventArgs e)
            {
                pinta = false;
            }

            // Enquanto o ponteiro se move na tela e o botão está pressionado,
            // pinta na tela
            private void painelDeDesenho_MouseMove(object sender, MouseEventArgs e)
            {
                if(pinta)
                {

                    // Habilita a borracha com a cor do fundo do form
                    graf.FillEllipse(new SolidBrush(this.BackColor), e.X, e.Y, espessura, espessura);

                    // Desenhando através de pequenos círculos
                    if (radioButtonCaneta.Checked)
                        graf.FillEllipse(new SolidBrush(this.cor), e.X, e.Y, espessura, espessura);
                }
            }

            private int RetornaEspessura()
            {
                // Tenta converter, se não conseguir lança a exceção e retorna o default
                try
                {
                    this.espessura = Convert.ToInt32(textBoxEspessura.Text);
                    if (espessura < 0)
                    {
                        espessura = espessura * -1;
                    }
                    return espessura;
                }

                catch (System.FormatException)
                {
                    MessageBox.Show("Valor de espessura inválido!");
                    textBoxEspessura.Text = espessuraPadrao.ToString();
                    return espessuraPadrao;
                }

            }

            private void buttonLimpaTela_Click(object sender, EventArgs e)
            {
                graf.Clear(painelDeDesenho.BackColor);
            }

            private void buttonCorCaneta_Click(object sender, EventArgs e)
            {
                ColorDialog caixaDeCores = new ColorDialog();
                caixaDeCores.ShowDialog();

                buttonCorCaneta.BackColor = caixaDeCores.Color;
                this.cor = caixaDeCores.Color;
            }

            private void buttonCorFundo_Click(object sender, EventArgs e)
            {
                ColorDialog caixaDeCores = new ColorDialog();
                caixaDeCores.ShowDialog();

                // Mudar cor de fundo sem alterar o desenho
                // E agora, José?


            }
        }
        }

    quarta-feira, 15 de março de 2017 20:37
  • Bom dia,

    Por gentileza, verifique se esse exemplo o ajuda:

    Image image = Image.FromFile("minhaImagem.png");
    
    Bitmap bmp = new Bitmap(image.Width, image.Height);
    using (Graphics g = Graphics.FromImage(bmp))
    {
        g.Clear(Color.SkyBlue);
        g.InterpolationMode = InterpolationMode.NearestNeighbor;
        g.PixelOffsetMode = PixelOffsetMode.None;
        g.DrawImage(image, Point.Empty);
    }
    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 16 de março de 2017 14:00
    Moderador
  • brother, rodei teu programa e nada aconteceu... 
    sexta-feira, 17 de março de 2017 01:41
  • Bom dia,

    Conseguiu resolver esse problema?

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    quinta-feira, 23 de março de 2017 12:28
    Moderador
  • Bom dia,

    Devido a falta de interação do autor dessa pergunta,

    essa thread está sendo fechada. Caso o problema ainda

    esteja ocorrendo, favor abrir uma nova thread.

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    segunda-feira, 27 de março de 2017 12:14
    Moderador