Toon posts:

[Java] Backup nemen van een image

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik ben een drag en drop applicatie aan het maken (in een JPanel)

ik heb de panel zo opgebouwd dat het een doublebuffered panel is
ik hou dus een image bij waar ik alles op teken,
nu wil ik uit deze image een stuk knippen om een backup te nemen van het scherm en tijdens het draggen het scherm weer te updaten door het terugzetten van deze backup

als ik echter een groot stuk uit de image wil knippen duurt dit zeer lang en gaat het draggen dus ook niet snel genoeg
het knippen doe ik door middel van een PixelGrabber en MemoryImageSource

iemand een idee hoe dit sneller kan,
in motif is er zoiets als XCreatePixmap, welke dit wel snel kan, is er zo ook iets in java?

Verwijderd

Topicstarter
niemand enig idee of er zon soort buffer bestaat?

Verwijderd

Topicstarter
Is het dan misschien mogelijk om een harde kopie te nemen van zon component?
Een kopie waar je ook kan op tekenen?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 25 March 2003 @ 10:13:
ik ben een drag en drop applicatie aan het maken (in een JPanel)
(..)
iemand een idee hoe dit sneller kan,
in motif is er zoiets als XCreatePixmap, welke dit wel snel kan, is er zo ook iets in java?

Waarom dubbelbuffer je een JPanel met een Image? JPanel kan automatisch dubbelbufferen, en dan is het gewoon mogelijk om een Graphicsobject van het panel op te vragen en hier benaderingen op te doen (bijv create() )


Zou je in het vervolg wel de editknop willen gebruiken? Je zit het topic nu 3x te kicken in 24 uur!!

Verwijderd

Topicstarter
ik vraag dus een image op via createImage()
en dit werkt goed

nu is er nog een probleem, ik hou veel van zulke schermpjes bij (internalframes), hoe kan ik die buffers (van elke panel) op een effieciente manier bijhouden, want opnieuw tekenen als de internalframe de focus krijgt duurt te lang?

excuseer voor het schoppen

Verwijderd

Topicstarter
ok,
doublebuffering is dus voorzien bij swingcomponentjes, is er nu een mogelijkheid om zelf graphics op de buffer te tekenen zonder dat ik al deze graphics bij iedere repaint opnieuw moet laten hertekenen?

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Ja:

Je maakt een Image. daar doe je een getGraphics() op daar ga je op tekenen.
Dan doe je in je paint methode van je frame g.drawImage(deImage); en je paint de graphics van je image op je frame.

Dat is het idee achter dubbelbufferen. Wat duurt precies te lang? en wat vind je te lang? en hoe doe je het dan nu? (als in: laat wat code zien :) )

Verwijderd

Topicstarter
Ik heb dus verschillende JInternalFrames in een desktoppane, hoeveel frames dit zijn hangt van de user af.
Nu heb ik in elk van deze JInternalFrames een object dat overerft van een JPanel, hierin worden een 200-tal componenten getekend (letterlijk getekend dmv Graphics).
Ik werk dan ook met een dubbele buffer om het flikkeren tegen te gaan.
Het probleem is nu dat het hertekenen van 200 componenten zoiets van een 1 seconde inneemt op winnt en 2.5 sec op IRIX 6.5 (beide JVM 1.4)
Wat dus lang is, want dit hertekenen moet gebeuren bij elke verplaatsing van de internalframes.
Ik dacht dan een Buffer bij te houden voor elke internalframe, maar dat kost veel te veel geheugen (3.75 Mb / frane).

Nu vroeg ik mij dus af of er niet intern in java voor elk van die componentjes een buffer wordt bijgehouden waar ook de inhoud (de getekende zaken) wordt in opgeslagen?
Of dat er natuurlijk een andere efficientere oplossing bestaat.

Over code gesproken, als je het hieruit niet kan opmaken wil ik die wel posten,maar dan ga ik die eerst wel wat moeten opkuisen, want er staan nogal veel system.out.println() en andere zooi tussen
het is nog echt een prototype code
Pagina: 1