2014-02-24 103 views
1

我已经打包了包含图像和其他文件的JAR,但对于下面的代码,我想知道如何访问打包的图像。Java从jar中获取打包文件

float[] matrix = { 
     0.111f, 0.111f, 0.111f, 
     0.111f, 0.111f, 0.111f, 
     0.111f, 0.111f, 0.111f, 
    }; 

    BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, matrix)); 
    blurredImage = op.filter(sourceImage, destImage); 

如果我想要访问图像模糊,但我的JAR中包装了它,我该如何使用它?

编辑:

try { 
       BufferedImage spritesheet = ImageIO.read(Content.class.getResourceAsStream("/Sprites/Enemies/enemy.gif")); 

       float[] matrix = { 0.111f, 0.111f, 0.111f, 
            0.111f, 0.111f, 0.111f, 
            0.111f, 0.111f, 0.111f, }; 

       BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, matrix)); 
       blurredImage = op.filter(spritesheet, spritesheet); 
this.setBackground(blurredImage); 
     }catch(Exception e){e.printStackTrace();} 
+0

只需从JAR加载图像作为资源? –

+0

@TimB怎么会这样,会像:example.png工作? – Arc

回答

0

我知道你的痛苦。从JAR加载图像是不应该令人讨厌的,但是。对于我最近的一个项目,我结束了

BufferedImage spritesheet = ImageIO.read(Content.class.getResourceAsStream("/Images/image_to_blur.gif")); 

哪里Content是封闭类。使用Eclipse,您可以创建一个资源文件夹并将其中的所有资产放入其中。

另一种选择:

getClass().getClassLoader().getResourceAsStream("resources/"+location); 

另一种选择:

Toolkit tk = Toolkit.getDefaultToolkit(); 
URL url = getClass().getResource("asset.png"); 
Image img = tk.createImage(url); 
tk.prepareImage(img, -1, -1, null); 

编辑:

好吧,做到“从我的瓶子装入背景图像,然后对其进行模糊处理,然后将其设置为我的背景,“您需要执行几个步骤。

  1. 建立一个JFrameJPanelJLabel握住你的形象。
  2. 从你的JAR
  3. 模糊图像(这取决于你想要模糊的类型,但我会假设高斯)
  4. 设置JLabel作为图像加载图像。

    public class wowthisisaclass{ 
    
    JFrame frame; 
    JPanel panel; 
    JLabel label; 
    
    float[] matrix = { 
        0.111f, 0.111f, 0.111f, 
        0.111f, 0.111f, 0.111f, 
        0.111f, 0.111f, 0.111f, 
    }; 
    
    public wowthisisaclass(){ //Step 1 
    JFrame window = new JFrame("Title"); 
    panel = new JPanel(); 
    panel.setPreferredSize(new Dimension(500,500)); 
    
    label = new JLabel((Icon) new ImageIcon(blur(getImage("/path.png"), matrix))); 
    
    
    //initpanel 
    panel.add(label); 
    
    //init frame 
    window.add(panel); 
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    window.setResizable(false); 
    window.pack(); 
    window.setLocationRelativeTo(null); 
    window.setVisible(true); 
    } 
    
    public BufferedImage getImage(String path){ //Step 2 
    try { 
        return ImageIO.read(wowthisisaclass.class.getResourceAsStream(path)); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
    return null; 
    } 
        public BufferedImage blur(BufferedImage src, float[] matrix){ //Step 3 
    
        ConvolveOp cop = new ConvolveOp(new Kernel(3, 3, matrix), ConvolveOp.EDGE_NO_OP, null); 
    
        BufferedImage blurredImage = new BufferedImage(src.getWidth(), src.getHeight(), BufferedImage.TYPE_3BYTE_BGR); 
        cop.filter(src, blurredImage); 
         return blurredImage; 
    } 
    } 
    

如果您需要任何解释,只问。 :)

+0

好,非常感谢,但现在怎么会使用该图像。生病编辑我的文章,让你知道我的意思。 – Arc

+0

你的问题是如何应用过滤器的图像? – Kyranstar

+0

嗯是的,如果你可以帮助我也:)这个java图形编辑 – Arc