2016-11-01 1 views
0

Dans le code que je définir la valeur alpha d'un pixel à 100 pour l'image entière et je veux la valeur Alpha soit 100 lors de la lecture de l'image. Mais à la partie de récupération, il me donne 255 (valeur par défaut). Qu'est-ce qui ne va pas ? et comment le résoudre? Toute aide serait appréciée ...la valeur Alpha Manipuler de BufferedImage

classe Demo {

Demo() 
{  
    try 
    { 

    BufferedImage im2 = new BufferedImage(width,height,BufferedImage.TYPE_INT_ARGB); 
    File f2 = new File("test2.jpg"); 
    im2 = ImageIO.read(f2);  
    int width1 = im2.getWidth(); 
    int height1 = im2.getHeight(); 

    for(int i=0;i<height1;i++) 
    { 
     for(int j=0;j<width1;j++) 
     { 
      Color c = new Color(50,0,0,100); //Set the alpha value to 100 
      im2.setRGB(j,i,c.getRGB());   // for every pixel 
     } 
    } 
    File f = new File("Demo_copy.jpg"); 
    ImageIO.write(im2,"jpg",f); 

    // Retrieving......... 
    BufferedImage im1; 
    File f1 = new File("Demo_copy.jpg"); 
    im1 = ImageIO.read(f1); 
    int width = im1.getWidth(); 
    int height = im1.getHeight(); 
    for(int i=0;i<height;i++) 
    { 
     for(int j=0;j<width;j++) 
     { 
     int pixel = im1.getRGB(j,i); 
     Color c = new Color(pixel,true); 
     int a = c.getAlpha(); 
     System.out.println("Alpha value is :"+a); // Printing Alpha : 255 for every pixel 
     } 
    } 
    }catch(Exception e){} 
} 
public static void main(String [] ar) 
{ 
    new Demo(); 
} 

}

Répondre

0

Le new BufferedImage(...) que vous attribuez à im2 est juste jeté (ordures collectées) après avoir attribué une nouvelle valeur de ImageIO.read(..) . Comme la nouvelle valeur est un JPEG et n'a pas d'alpha, peu importe les valeurs alpha que vous définissez. Ils resteront toujours 255 (complètement opaque).

Au lieu de cela, vous voulez sans doute faire quelque chose comme ceci:

// Read opaque image... 
BufferedImage img = ImageIO.read(new File("test2.jpg")); 

// ...convert image to TYPE_INT_ARGB... 
BufferedImage im2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); 

Graphics2D g = im2.createGraphics(); 
try { 
    g.drawImage(img, 0, 0, null); 
} 
finally { 
    g.dispose(); 
} 

// ... loop over and change alpha in im2 as before 

Enfin, vous devriez écrire l'image dans un format qui prend en charge l'alpha sans perte, comme PNG au lieu de JPEG, pour être sûr que vous obtenez les valeurs vous attendez:

ImageIO.write(im2,"PNG", new File("Demo_copy.png")); 

PS: Il pourrait fonctionner en JPEG aussi, comme intégré dans le plugin Java JPEG ImageIO prend en charge la lecture/écriture avec des valeurs JPEGs alpha. Cependant, la plupart des autres logiciels les interpréteront mal comme des fichiers JPEG CMJN, et les couleurs auront l'air tout faux. En outre, le format JPEG est à perte, donc vous ne verrez probablement pas la valeur alpha exacte (100) comme vous pourriez l'attendre du côté récepteur. C'est pourquoi je suggère d'utiliser PNG. TIFF ou un autre format qui prend en charge alpha fonctionnerait également, mais nécessite des plugins supplémentaires.

+0

fonctionne parfaitement .REMERCIE monsieur !!! –

+0

Bonnes choses! Envisagez de marquer la réponse comme acceptée, pour indiquer qu'elle a résolu votre problème. – haraldK

+0

Monsieur, la solution ci-dessus fonctionne parfaitement pour les fichiers PNG. Mais existe-t-il une méthode avec laquelle je peux l'implémenter pour les fichiers jpg? Je veux définir les valeurs de mon choix en image jpg et que vous voulez récupérer la même chose. –