[vb .net] picturebox layeren

Pagina: 1
Acties:
  • 238 views sinds 30-01-2008
  • Reageer

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 27-05 11:14
Ik ben bezig om met vb .net een eenvoudig programma te maken waarbij er op een achtergrond een plaatje verschijnt.
Die achtergrond is een afbeelding die beweegt van rechts naar links.
Het plaatje is ook een afbeelding en die beweegt van links naar rechts.
Nu wil ik dus dan het plaatje - in de vorm van een bal- het achtergrondplaatje doorlaat zodat ik de bal echt rond is, en niet een rondje met een grijs vierkant eromheen.

Ik heb het geprobeerd met de backcolor = transparent maar dan neemt ie alleen de achtergrondkleur over van de onderligende control, maar ik wil de achtergrondafbeelding.

Ik heb gezocht op google maar kwam niet verder dan:
http://www.gamedev.net/co...topic.asp?topic_id=151476 met
code:
1
2
3
4
5
Dim gr As Graphics = PictureBox1.CreateGraphics
Dim bmp As New Bitmap(Application.StartupPath & "\test.bmp")

bmp.MakeTransparent(Color.Black)
gr.DrawImage(bmp, 0, 0, bmp.Size.Width, bmp.Size.Height)


Hier heb ik ook niets aan, want ook hierbij krijg ik alleen de achtergrondkleur,en niet het achtergrondplaatje.

een search op GoT leverde ook niks op en "Visual Basic .net in 24 uur" bracht ook geen uitkomst.

Hopelijk kan iemand mij op weg helpen

Verwijderd

Nou, bij mijn weten kan je alleen GIF's een transparante achtergrond geven. Dus zolang je een BMP als plaatje gebruikt, gaat het niet lukken. Kan je een GIFje gebruiken? ('k weet verder weinig van WinForms af...)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Als ik het goed begrijp is dit wat je zoekt... ik snap je vraag niet helemaal. Maar meybe:
http://www.pscode.com/vb/...?txtCodeId=1414&lngWId=10

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Visual Basic .NET:
1
PictureBox1.BackColor = Color.Transparent

O-)

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • MWP
  • Registratie: Maart 2001
  • Laatst online: 27-05 11:14
Verwijderd schreef op 17 maart 2004 @ 17:32:
Nou, bij mijn weten kan je alleen GIF's een transparante achtergrond geven. Dus zolang je een BMP als plaatje gebruikt, gaat het niet lukken. Kan je een GIFje gebruiken? ('k weet verder weinig van WinForms af...)
Ik gebruik zelf ook een png afbeelding, maar in dat voorbeeld stond bmp, dus helaas helpt dat niet.
Korben schreef op 17 maart 2004 @ 17:42:
Visual Basic .NET:
1
PictureBox1.BackColor = Color.Transparent

O-)
Dat bedoelde ik dus juist niet, dan krijg je wel de achtergrond kleur, maar ik wil de afbeelding die achter het plaatje zit.

Ik heb dus een formulier, op dit formulier heb ik over het hele formulier een picturebox met een afbeelding.
Op deze picturebox heb ik nog een picturebox, met een png plaatje van een bal.
Ik wil dus dat de 'rechthoek' die om het ballatje heen zit, doorzichtig wordt, en dat de picturebox die eronder ligt zichtbaar wordt.
Met color.transparent krijg ik alleen de backcolor van de onderste picturebox te zien, en niet de afbeelding ervan.

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Waarom gebruik je niet GDI+?

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 27-05 11:14
questa schreef op 17 maart 2004 @ 18:03:
Waarom gebruik je niet GDI+?
eeh... omdat ik daar nog nooit van gehoord heb :P
Ik heb even gezocht op google, en(denk dat)ik begrijp dat dat een functie is in vb .net waarmee je afbeeldingen en andere shapes tijdens runtime mee kunt maken en op een krachtige manier kunt bewerken.
Ik heb alleen niet kunnen vinden hoe het precies in elkaar zit.
Kan je misschien een (kleine) uitleg of site geven waar duidelijk staat uitgelegd hoe (de basis van) GDI+ werkt?

  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

MWP schreef op 17 maart 2004 @ 18:24:
[...]

eeh... omdat ik daar nog nooit van gehoord heb :P
Ik heb even gezocht op google, en(denk dat)ik begrijp dat dat een functie is in vb .net waarmee je afbeeldingen en andere shapes tijdens runtime mee kunt maken en op een krachtige manier kunt bewerken.
Ik heb alleen niet kunnen vinden hoe het precies in elkaar zit.
Kan je misschien een (kleine) uitleg of site geven waar duidelijk staat uitgelegd hoe (de basis van) GDI+ werkt?
Uh... MSDN?

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Met GDI+ kun je idd op een vrij simple manier shapes, lines, images etc. tekenen op een object. Je kunt dit bijvoobeeld doen op je form.

Even heel simple stukje code:

C#:
1
2
3
4
5
6
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black, 1F);
Brush brush = new SolidBrush(Color.SeaGreen);
Rectangle r = new Rectangle(5, 5, 5, 5);
g.FillRectangle(brush, r);
g.DrawRectangle(pen, r);


Als je dit eenmaal is gelukt kom je met MSDN een stuk verder! :)

  • MWP
  • Registratie: Maart 2001
  • Laatst online: 27-05 11:14
questa schreef op 17 maart 2004 @ 20:04:
Met GDI+ kun je idd op een vrij simple manier shapes, lines, images etc. tekenen op een object. Je kunt dit bijvoobeeld doen op je form.

Even heel simple stukje code:

C#:
1
2
3
4
5
6
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Black, 1F);
Brush brush = new SolidBrush(Color.SeaGreen);
Rectangle r = new Rectangle(5, 5, 5, 5);
g.FillRectangle(brush, r);
g.DrawRectangle(pen, r);


Als je dit eenmaal is gelukt kom je met MSDN een stuk verder! :)
Heel erg bedankt, ik heb jouw voorbeeld naar vb.net code omgezet en t uitgeprobeerd.
Daarna heb ik met deze pagina (en MSDN) de volgende code gekregen en die werk uitstekend voor wat ik wil doen.
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        Dim bg As New Bitmap("c:\nix.bmp")
        Dim mergedBMP As New Bitmap("c:\pop.bmp")
        Dim achter As New Bitmap("c:\achtergrond.bmp")
        Dim h As Graphics = Graphics.FromImage(bg)
        h.DrawImage(achter, 0, 0)
        h.Dispose()
        Dim i As Graphics = Graphics.FromImage(bg)
        i.DrawImage(achter, 0, 0)
        i.Dispose()
        Dim g As Graphics = Graphics.FromImage(bg)
        mergedBMP.MakeTransparent(Color.Red)
        g.DrawImage(mergedBMP, nu, 231)
        g.Dispose()
        PictureBox1.Image = bg

Ik gebruik een picturebox, omdat de tekening anders verdwijnt als het formulier geresized wordt (en resizen is nodig voor deze applicatie)

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

MWP schreef op 17 maart 2004 @ 22:18:
[...]
Ik gebruik een picturebox, omdat de tekening anders verdwijnt als het formulier geresized wordt (en resizen is nodig voor deze applicatie)
Leuk bedacht... maar teken in je resize event gewoon alles weer (liever uit een buffer laden). Werkt prima!

Sorry voor de C# code... ik keek weer is niet goed |:(
Pagina: 1