2012-04-30 12 views
27

मेरे पास पारदर्शिता वाला एक पीएनजी फ़ाइल है जिसे BufferedImage में लोड और संग्रहीत किया गया है। मुझे TYPE_INT_ARGB होने की आवश्यकता है। हालांकि, जब मैं getType() का उपयोग करता हूं तो लौटाया गया मूल्य 0 (TYPE_CUSTOM) 2 (TYPE_INT_ARGB) के बजाय होता है।फ़ाइल से BufferedImage बनाएं और इसे TYPE_INT_ARGB

यह मैं कैसे लोड .png है:

public File img = new File("imagen.png"); 

public BufferedImage buffImg = 
    new BufferedImage(240, 240, BufferedImage.TYPE_INT_ARGB); 

try { 
    buffImg = ImageIO.read(img); 
} 
catch (IOException e) { } 

System.out.Println(buffImg.getType()); //Prints 0 instead of 2 

मैं कैसे .png लोड कर सकते हैं, BufferedImage में बचाने के लिए और यह TYPE_INT_ARGB बनाते हैं? मेरी छवि फ़ाइल के लिए

+3

बदलें 'सार्वजनिक BufferedImage buffImg = नए BufferedImage (240, 240, BufferedImage.TYPE_INT_ARGB)' और 'पकड़ (IOException ई) {}' 'पकड़ करने के लिए (IOException ई) {e.printStackTrace(); } '। नए आउटपुट की रिपोर्ट करें। –

+5

'System.Out.Println' *** वह संकलित नहीं होगा। *** बेहतर सहायता के लिए, एक [एसएससीसीई] (http://sscce.org/) पोस्ट करें। –

उत्तर

62
BufferedImage in = ImageIO.read(img); 

BufferedImage newImage = new BufferedImage(
    in.getWidth(), in.getHeight(), BufferedImage.TYPE_INT_ARGB); 

Graphics2D g = newImage.createGraphics(); 
g.drawImage(in, 0, 0, null); 
g.dispose(); 
+0

अरे काम किया। धन्यवाद! – user1319734

+15

@ user1319734, शायद आप इसे स्वीकृत उत्तर के रूप में चिह्नित करना चाहते हैं? – iX3

+1

यह बेहद अक्षम है और छवि आकार बढ़ने के साथ क्रमिक रूप से कम व्यवहार्य हो जाता है। – alexantd

6
try { 
    File img = new File("somefile.png"); 
    BufferedImage image = ImageIO.read(img); 
    System.out.println(image); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

उदाहरण आउटपुट:

[email protected]: type = 5 ColorModel: #pixelBits = 24 
numComponents = 3 color 
space = [email protected] 
transparency = 1 
has alpha = false 
isAlphaPre = false 
ByteInterleavedRaster: 
width = 800 
height = 600 
#numDataElements 3 
dataOff[0] = 2 

आप println (वस्तु) चला सकते हैं; किसी भी वस्तु के बारे में और इसके बारे में कुछ जानकारी प्राप्त करें।

0

फ़ाइल से एक BufferedImage बनाएँ और यह TYPE_INT_RGB

import java.io.*; 
import java.awt.image.*; 
import javax.imageio.*; 
public class Main{ 
    public static void main(String args[]){ 
     try{ 
      BufferedImage img = new BufferedImage( 
       500, 500, BufferedImage.TYPE_INT_RGB); 
      File f = new File("MyFile.png"); 
      int r = 5; 
      int g = 25; 
      int b = 255; 
      int col = (r << 16) | (g << 8) | b; 
      for(int x = 0; x < 500; x++){ 
       for(int y = 20; y < 300; y++){ 
        img.setRGB(x, y, col); 
       } 
      } 
      ImageIO.write(img, "PNG", f); 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

यह शीर्ष पर एक बड़ी नीली लकीर पेंट कर सकते हैं।

आप यह चाहते हैं ARGB, तो वह ऐसा कार्य करें:

try{ 
     BufferedImage img = new BufferedImage( 
      500, 500, BufferedImage.TYPE_INT_ARGB); 
     File f = new File("MyFile.png"); 
     int r = 255; 
     int g = 10; 
     int b = 57; 
     int alpha = 255; 
     int col = (alpha << 24) | (r << 16) | (g << 8) | b; 
     for(int x = 0; x < 500; x++){ 
      for(int y = 20; y < 30; y++){ 
       img.setRGB(x, y, col); 
      } 
     } 
     ImageIO.write(img, "PNG", f); 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
    } 

MyFile.png खोलें, यह शीर्ष पर एक लाल लकीर है। `सार्वजनिक BufferedImage buffImg को`;