Jump to content
Reverse

Layers de Bitmaps?

Recommended Posts

Reverse

Boas,

Queria fazer uma aplicação que me permitisse marcar um mapa. Para isso crio um Panel onde a imagem do mapa é a BackgroundImage pré-definida e onde as marcas são escritas no evento panel1_Paint.

35jjg9s.jpg

Basicamente é isto :

namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            Panel p = new Panel();
            p.Location = new System.Drawing.Point(0, 0);
            p.Name = "mapa";
            p.BackColor = Color.Transparent;
            p.Size = new System.Drawing.Size(618,537);
            p.Paint += new System.Windows.Forms.PaintEventHandler(this.panel1_Paint);
            p.BackgroundImage = Image.FromFile("c:\\marcas\\ex1.png");
            this.Controls.Add(p);
            p.BringToFront();

        }

        private void panel1_Paint(object sender, PaintEventArgs e)
        {
            Bitmap myBitmap = new Bitmap("c:\\marcas\\ex3.bmp");
            myBitmap.MakeTransparent();
            e.Graphics.DrawImage(myBitmap, 250, 250);
            Bitmap myBitmap2 = new Bitmap("c:\\marcas\\ex4.bmp");
            myBitmap2.MakeTransparent();
            e.Graphics.DrawImage(myBitmap2, 500, 150);
            Bitmap myBitmap3 = new Bitmap("c:\\marcas\\ex2.bmp");
            myBitmap3.MakeTransparent();
            e.Graphics.DrawImage(myBitmap3, 150, 100);
e.Graphics.Clear(this.BackColor); // Para remover.
        }

O problema é que não sei como fazer se depois as quiser remover pois ao fazer e.Graphics.Clear(this.Backcolor); ele basicamente pinta-me o ecrã de preto.

jt6tcy.jpg

Há maneira de fazer isto de forma a que volte a aparecer-me o mapa que eu quero?

Share this post


Link to post
Share on other sites
killercode

se quisseres remover layers o q te aconselho é q faças uma flag para cada layer... o onPaint vai estar sempre a disparar se alterares o estado de cada layer podes selecionar na boa o q queres mostrar.

Se tiveres duvidas diz :P

Share this post


Link to post
Share on other sites
Reverse

Acho que a duvida aqui é como trabalhar com layers. Qual o melhor controlador a utilizar para escrever estes eventos gráficos? Ao criar um Panel por "marca" o programa fica muito lento.

Share this post


Link to post
Share on other sites
killercode

se estas com problemas de performance... usa double buffering... pesquisa por GDI+ C# double buffering e vais encontrar algumas dicas interessantes...

relativamente ao controlo podes ser tu a fazer o controlo.. mas não acho q a abordagem que estas a fazer seja má de todo

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.