oubaouba
Messages postés3Date d'inscriptionmercredi 13 novembre 2002StatutMembreDernière intervention25 novembre 2002
-
15 nov. 2002 à 14:17
oubaouba
Messages postés3Date d'inscriptionmercredi 13 novembre 2002StatutMembreDernière intervention25 novembre 2002
-
16 nov. 2002 à 14:50
je suis en train de creer une applet qui permettrait, à partir d'une image, de la faire apparaitre ou disparaitre grace à un fondu.
pour cela j'utilise un PixelGrabber pour récupérer le tableau contenant tous les pixels de l'image.
ensuite je transmet le tableau de pixels à un MemoryImageSource qui me permettrait (normalement!!!) d'actualiser la couleur des pixels au fur et à mesure du thread grace à newPixels().
pour le fondu je fais varier le composant alpha des pixels.
Bien entendu cela ne fonctionne pas!!!
si quelqu'un pouvait me donner une piste je lui serais très reconnaissant. merci. 8-)
JHelp
Messages postés261Date d'inscriptionjeudi 5 septembre 2002StatutMembreDernière intervention 6 octobre 200511 16 nov. 2002 à 07:28
As-tu bien initialiser ton memory image source ?
<code>
//Initialise l'image
imageMemoire = new MemoryImageSource(largeur,hauteur,model,pixels,0,largeur);
//L'image est animée
imageMemoire.setAnimated(true);
//On met à jour l'image en entière (Le buffer est copié d'un coup)
imageMemoire.setFullBufferUpdates(true);
</code>
les deux lignes suivants la construction de la memoryImage doivent toujours se trouver juste aprés elle. En tout cas avant tout ajout, retrait, affichage de pixel de l'image.
public void init() {
//création de l'image
img = getImage(getCodeBase(),"boat.gif");
//création du tracker
tracker = new MediaTracker(this);
tracker.addImage(img, 0);
try{
tracker.waitForID(0);
}catch (InterruptedException ie) {}
//initialisation du tableau de pixel
tabPix = new int[img.getWidth(this) * img.getHeight(this)];
//instanciation d'un pixelGrabber
monGrabber = new PixelGrabber(img, 0, 0, img.getWidth(this), img.getHeight(this), tabPix, 0, img.getHeight(this));
//récupération des pixels
try{
monGrabber.grabPixels();
}catch(InterruptedException ie){
System.err.println("interrupted waiting for pixels!");
return;
}
//instanciation d'un memoryImageSource
monSource = new MemoryImageSource(img.getWidth(this), img.getHeight(this),tabPix, 0, img.getWidth(this));
//permettre les animations
monSource.setAnimated(true);
monSource.setFullBufferUpdates(true);
//création de l'image resImg = createImage(monSource);
}
public void start(){
//création et démarrage du thread
monThread = new Thread(this);
monThread.start();
}
public void paint(Graphics g) {
//envoie des nouveaux pixels au memoryImageSource
monSource.newPixels(0, 0, img.getWidth(this),img.getHeight(this));
g.drawImage(resImg, 0, 0, this);
}
public void run(){
while(monThread.isAlive()){
try{
monThread.sleep(100);
}catch(InterruptedException ie){}
//transformation des pixels du tableau
transAlpha(tabPix);
repaint();
}
}
public void update(Graphics g) {
paint(g);
}
public void transAlpha(int[] tabPixRec){
//transformation de chaque pixel
for(int i=0;i<tabPixRec.length;i++){
tabPixRec[i] = filter(tabPixRec[i]); }
}
public int filter(int pixel){
//récupération des valeurs des pixels
int alpha = (pixel & 0xff000000) >> 24,
red = (pixel & 0xff0000) >> 16,
green = (pixel & 0xff00) >> 8,
blue = pixel & 0xff;
return traitCoulPix(alpha, red, green, blue);
}
int traitCoulPix(int a, int r, int g, int b) {
//chaque composant alpha est diminué de 50 if(a 0){}else{a a - 50;}
return a << 24 | r << 16 | g << 8 | b;
}