Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    3

    [JAVA]Problema BufferedImage in VRam (g.drawImage)

    Da poco ho iniziato a creare un programma che usa il metodo Graphics.drawImage(image, x, y, w, h, imageObserver). In certe situazioni il programma deve modificare l' immagine (image) anche 60 volte al secondo. Il problema e che ogni volta che l'immagine viene modificata, sulla VRam (memoria della GPU) viene riscritta aggiungendosi all' altra! Dopo pochi secondi ho la memoria piena! Ho notato che con il metodo Graphics.drawImage(image, x, y, imageObserver) questo non accade! Perchè? C' è una soluzione?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    Il riferimento all' oggetto Image dove lo mantieni?
    Se ha qualche container dove metti le immagini, allora il problema lo risolvi settando a null i riferimenti alle immagini che non usi più.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    3
    Dopo un po di test ho capito che l'aumento della VRam era dovuto al fatto che il metodo g.drawImage(image, x, y, w, h, imageObserver) per stampare l' immagine la ridimensiona ogni volta che l' immagine cambia, ma non cancella le altre immagini ridimensionate. Io uso una sola immagine, che poi passo al JPanel con il mio metodo setImage(BufferedImage image). Ho provato a settare l' immagine null prima di assegnargli quella nuova ma non funziona. Ho provato con image.flush() e sembra che funzioni abbastanza anche se la memoria è un pò altalenante. Non c'è un metodo più efficiente per eliminare le immagini ridimensionate che salva il metodo drawImage() (chiamare tutte le volte il garbage collector spreca risorse)?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.