[vb.net] Snelheid laden afbeeldingen verhogen

Pagina: 1
Acties:
  • 284 views

  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Is het mogelijk om grote afbeeldingen (3000x2000 -> 2,5 mb) snel te laden?
Ik heb hier een form waar ik 36 afbeeldingen op moet laden, deze afbeeldingen worden om de 15 seconden opnieuw geladen. Ieder afbeelding schuift dan 1 plaats op en 1 nieuw afbeelding komen er dan bij.

Ik laad de afbeeldingen in PictureBoxen en laat die dan autostretchen, zodat het afbeeldingen compleet weergegeven wordt.
De afbeeldingen in een kleiner formaat opslaan is geen oplossing, het zijn te veel afbeeldingen om ze alllemaal dubbel op te slaan -> beperkte harde schijf ruimte. En de kwaliteit is toch echt belangrijk.

Ik laad de afbeeldingen op de volgende manier:
code:
1
2
3
4
5
6
7
8
9
10
'Picture 3..36 code staat hiervoor, is teveel om hier allemaal neer te zetten
Picture2.ImageLocation = Picture1.ImageLocation
Picture2.Load()
Label2.Text = Label1.Text
Picture1.ImageLocation = Picture0.ImageLocation
Picture1.Load()
Label1.Text = Label0.Text
Picture0.ImageLocation = "c:\" & Lastpicture & ".JPG"
Picture0.Load()
Label0.Text = Lastpicture


De Picture0.Load() is nodig om alles goed te updaten bij het weergeven, anders lopen de nummers door en de afbeeldingen pas later en verkeerd.

Als ik dit doe is het programma zo erg druk bezig met de harde schijf, dat de computer lijkt te hangen en het duurt de hele tijd als het programma draait.

Iemand een oplossing hoe ik dit kan versnellen, zodat de computer zo klaar is als er nieuwe afbeeldingen geladen en de rest doorgeschoven wordt?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Doorschuiven als in 35 van de oude plaatjes blijven zichtbaar, 1 valt eraf en er komt 1 nieuwe bij?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:16

TeeDee

CQB 241

Je hebt ook serieus nu bovenstaande code ~35 x herhaald?
De afbeeldingen in 1 x inladen, position setten/getten en een afbeelding uit de collectie gooien is geen optie?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

Toen ik jhe topic begon te lezen zat ik aan een stuk multithreading te denken aangezien het inlezen een IO heavy operatie is waarbij het loont om meerdere bestanden naast elkaar in te laden. In een Java applicatie van me heb ik hiermee wel eens een fikse snelheidswinst geboekt omdat ik daar eerst ook enkele grote textures na elkaar aan het inladen was.

Nadat ik echter verder was in je bericht begreep ik dat je alle 35 bestanden elke keer weer opnieuw aan het inladen bent. Waarom in vredesnaam? Kun je ipv de bestandslokatie niet gewoon het plaatje zelf doorgeven aan de volgende picturebox? Dan hoef je telkens alleen maar het nieuwe bestand in te laden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • 0123456
  • Registratie: Maart 2005
  • Laatst online: 28-07-2010
Het is niet de complete code, want het gaat over meerdere schermen en meerdere locaties op het scherm.

En er worden inderdaad 35 oude afbeeldingen doorgeschoven en 1 eraf en 1 nieuwe erbij.

Ik wil best de afbeelding zelf doorgeven, maar hoe doe ik dit in vb.net?
In VB6 ging dit wel allemaal goed en snel 8)7 .

[ Voor 23% gewijzigd door 0123456 op 27-05-2008 17:01 . Reden: extra info erbij op vraag ]


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
0123456 schreef op dinsdag 27 mei 2008 @ 16:57:
Het is niet de complete code, want het gaat over meerdere schermen en meerdere locaties op het scherm.

En er worden inderdaad 35 oude afbeeldingen doorgeschoven en 1 eraf en 1 nieuwe erbij.

Ik wil best de afbeelding zelf doorgeven, maar hoe doe ik dit in vb.net?
In VB6 ging dit wel allemaal goed en snel 8)7 .
pictureBox1.Image = pictureBox2.Image ? Lijkt te werken in C# (compiled had even geen plaatjes e.d.) Als ik het goed heb wordt de reference van pictureBox2 overgenomen door p1. en als p2 een nieuw plaatje krijgt blijft p1 naar het oude plaatje pointen. (tenzij p1 nu naar p2.image verwijst en niet het image zelf)

Anyway dat moet je even testen maar als je images kunt doorgeven ben je een stuk verder. Anders moet je een array van 35 variabelen Images maken en die telkens doorgeven + 1 tje laden. dan kan het sowieso.

MultiThreading gaat hier waarschijnlijk niet helpen omdat IO hier de bottleneck is.

~ Mijn prog blog!


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 18-11 08:25

Janoz

Moderator Devschuur®

!litemod

In VB.NET gaat dat ook behoorlijk snel. Ik ben helemaal geen .NET-er en ik heb net eventjes rond lopen zoeken op de MSDN en daar gelezen dat er blijkbaar ook een Picture type is en data je een PictureBox ook kunt vullen met een Picture. Vervolgens kan ik zelf nog bedenken dat ik dan met een lijst van pictures kan werken ipv pictureLocations.

Dit had jij ook kunnen bedenken wanneer je nu eindelijk eens een keertje documentatie door ging lezen ipv telkens weer naar programming toe te rennen. Als ik, zonder dat ik in mijn leven ooit met .NET bezig ben geweest, in een paar minuten kan vinden hoe je een afbeelding door zou kunnen geven ipv enkel de locatie, dan zou jij dat toch ook moeten kunnen?

Het is al eens eerder tegen je gezegd en ik kan het alleen maar benadrukken:

Koop een boek en leer met documentatie werken.....

Mocht je een volgend probleem willen aankaarten, probeer het dan eerst zelf uit te zoeken en laat ook in je TS terug komen dat je dat gedaan hebt.....

[ Voor 8% gewijzigd door Janoz op 27-05-2008 17:13 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1

Dit topic is gesloten.