[VB 6.0] Refreshen zonder leeg scherm

Pagina: 1
Acties:

  • Speedswitch
  • Registratie: December 2004
  • Laatst online: 22-11 14:42
Hallo proggers,

Ik ben voor een project van school bezig met een applicatie die webcams uit moet lezen. Hier ben ik al erg ver mee, usb cams worden goed herkend en aangestuurd.

Nu is 1 van de gestelde eisen, dat ook IP camera's uitgelezen moeten worden. Daarbij leek het me het handigste als ik een plugin van IE explorer zou gebruiken, die naar de .jpg van de camera te verwijzen, en 1 of 2 maal per seconde laten refreshen. Dit heb ik gedaan en werkt prima. Er is alleen 1 probleem..

Bij het refreshen van de afbeelding wordt het scherm tijdelijk wit (duurt maar een fractie van een seconde) voordat de nieuwe afbeelding geladen wordt. Dit is natuurlijk erg irritant, zeker als je 2 keer per seconde refreshed heb je dus 2 keer per seconde een wit vak voor je neus.

Nu vroeg ik me af of het mogelijk is om IE te laten wachten met refreshen tot hij het nieuwe plaatje opgehaald heeft, en in het geheugen heeft staan. Dus een plaatje van de IP cam ophalen, die in het geheugen zetten, en dan in 1 keer weergeven. Dan hoop ik dat je die witte refresh-vakken niet meer ziet, en je dus een semi-vloeiend beeld krijgt.

Iemand enig idee? Als iemand een betere manier weet om die .jpg op te halen en weer te geven dan ben ik u zeer erkentelijk.

Ik gebruik VB 6.0 en de IE plugin die ik gebruik heet MShtml.tlb

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
De weg die je nu bent ingeslagen is nogal beperkt; je zit nu aan de OCX van IE vast en dan heb je er maar weinig controle over. Er zijn zat andere manieren te bedenken, maar de makkelijkste oplossing met de weg die je reeds gekozen hebt is misschien nog wel het volgende:

Maak nog zo'n ding op je form die een halve seconde achter/voor ligt op de ander; zet ze op elkaar en swap m.b.v. het z-index property de ZOrder method (of visible) de controls om-en-om naar voren/zichtbaar. Een beetje primitief ("double buffering" :X ) maar op dit moment het makkelijkst te realiseren voor je ;)
Het probleem van je nu gekozen weg is dat je niet precies weet wanneer de refresh plaatsvindt en je dus niet echt kunt reageren om het flitsen te voorkomen.

Een mogelijke andere methode zou (o.a.) zijn: Het met WinHTTP ophalen van de JPG en deze in een picturebox plempen. Mocht dit ook flitsen dan kun je met "autoredraw" nog het een en ander een klein beetje verbeteren (maar ik verwacht dat het prima werkt).

Ik neem aan dat je je explorer control rechstreeks de URL van het plaatje geeft en dan "manueel" de .refresh method aanroept om de zoveel tijd? In dat geval kun je ook nog overwegen een kleine .html file te maken met een stukje javascript en die in je explorer control te laden. Dan kun je in JS het refreshen/reloaden/"double buffer" gebeuren doen en werkt het mooi asynchroon met je app zodat die er ook geen last van heeft als de JPG een keer wat moeite heeft met laden ofzo ;)

[ Voor 23% gewijzigd door RobIII op 19-12-2006 22:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • ZaZ
  • Registratie: Oktober 2002
  • Laatst online: 27-11 15:14

ZaZ

Tweakers abonnee

Misschien een simpele workaround...
Zou je misschien ook niet een LockWindowUpdate erop los kunnen laten voor de resfresh.
Dan als ie klaar is die weer opheffen?


edit:
Nevermind.. Ik denk dat ik het verkeerd heb begrepen

[ Voor 18% gewijzigd door ZaZ op 19-12-2006 23:05 ]

Lekker op de bank


  • Speedswitch
  • Registratie: December 2004
  • Laatst online: 22-11 14:42
RobIII thnx man!
Eeuwige dank valt u ten deel ;)

Ik heb het uiteindelijk gefixt dmv het javescriptje dat je voorstelde. Werkt veel beter, 5 fps framecount en vloeiend beeld. Ben dus ontzettend bij nu... moet alleen nog ff aan het werk, want het is nog niet af en ik moet het morgen opleveren :X