Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>OK managed to get the basics working,</p> <p>I used the link from Ewald, thanks mate!</p> <p>Here's the working code (just change the 'iphone4' image path to an image of your choice):</p> <pre><code>import java.awt.BorderLayout; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseMotionAdapter; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.ImageIcon; import java.awt.image.BufferedImage; import java.awt.image.FilteredImageSource; import java.awt.image.ImageFilter; import java.awt.image.ImageProducer; import java.awt.image.RGBImageFilter; import java.awt.Toolkit; import java.io.File; import javax.imageio.ImageIO; import java.awt.Stroke; import java.awt.BasicStroke; import java.awt.AlphaComposite; public class Main { public static void main(String[] args) { JFrame frame = new JFrame(); final DrawPad drawPad = new DrawPad(); frame.add(drawPad, BorderLayout.CENTER); JButton clearButton = new JButton("New Scratch-Card"); clearButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { drawPad.clear(); } }); frame.add(clearButton, BorderLayout.SOUTH); frame.setSize(500, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } class DrawPad extends JComponent { BufferedImage image; BufferedImage card_surface; Graphics2D graphics2D; int currentX, currentY, oldX, oldY; public DrawPad() { final Stroke stroke = new BasicStroke (17.0F, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL); setDoubleBuffered(false); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { oldX = e.getX(); oldY = e.getY(); } }); addMouseMotionListener(new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { currentX = e.getX(); currentY = e.getY(); if (graphics2D != null){ graphics2D.setStroke(stroke); graphics2D.setPaint(Color.GRAY); //graphics2D.setComposite(makeComposite(0.5F)); graphics2D.drawLine(oldX, oldY, currentX, currentY); repaint(); oldX = currentX; oldY = currentY; } } }); } private AlphaComposite makeComposite(float alpha) { int type = AlphaComposite.SRC_OVER; return(AlphaComposite.getInstance(type, alpha)); } private Image TransformColorToTransparency(BufferedImage image, Color c1, Color c2) { // Primitive test, just an example final int r1 = c1.getRed(); final int g1 = c1.getGreen(); final int b1 = c1.getBlue(); final int r2 = c2.getRed(); final int g2 = c2.getGreen(); final int b2 = c2.getBlue(); ImageFilter filter = new RGBImageFilter() { public final int filterRGB(int x, int y, int rgb) { int r = (rgb &amp; 0xFF0000) &gt;&gt; 16; int g = (rgb &amp; 0xFF00) &gt;&gt; 8; int b = rgb &amp; 0xFF; if (r &gt;= r1 &amp;&amp; r &lt;= r2 &amp;&amp; g &gt;= g1 &amp;&amp; g &lt;= g2 &amp;&amp; b &gt;= b1 &amp;&amp; b &lt;= b2) { // Set fully transparent but keep color return rgb &amp; 0xFFFFFF; } return rgb; } }; ImageProducer ip = new FilteredImageSource(image.getSource(), filter); return Toolkit.getDefaultToolkit().createImage(ip); } private BufferedImage ImageToBufferedImage(Image image2, int width, int height) { BufferedImage dest = new BufferedImage( width, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = dest.createGraphics(); //g2.drawImage(image, 0, 0, null); g2.drawImage(image2, 0, 0, null); //g2.dispose(); return dest; } public void clear() { image=null; card_surface=null; repaint(); } public void paintComponent(Graphics g) { if (image == null) { image = new BufferedImage(500, 300, BufferedImage.TYPE_INT_ARGB); String imagePath = "iPhone-4-Pattern-Wallpaper-07.jpg"; File inFile = new File(imagePath); try{ image = ImageIO.read(inFile); }catch(java.io.IOException e){System.out.println(e);} graphics2D = image.createGraphics(); //image = new ImageIcon().getImage(""); //image = createImage(getSize().width, getSize().height); //graphics2D = (Graphics2D) image.getGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //graphics2D.setPaint(Color.white); // graphics2D.fillRect(0, 0, getSize().width, getSize().height); // graphics2D.setPaint(Color.black); repaint(); } if (card_surface == null) { card_surface = new BufferedImage(500, 300, BufferedImage.TYPE_INT_ARGB); graphics2D = (Graphics2D) card_surface.getGraphics(); graphics2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); graphics2D.setPaint(Color.green); graphics2D.fillRect(0, 0, getSize().width, getSize().height); repaint(); } g.drawImage(image, 0, 0, null); g.drawImage(card_surface, 0, 0, null); Image transpImg2 = TransformColorToTransparency(card_surface, new Color(0, 50, 77), new Color(200, 200, 255)); BufferedImage resultImage2 = ImageToBufferedImage(transpImg2, image.getWidth(), image.getHeight()); g.drawImage(image, 0, 0, null); g.drawImage(resultImage2, 0, 0, null); /* File outFile2 = new File("map_with_transparency2.png"); try{ ImageIO.write(resultImage2, "PNG", outFile2); }catch(Exception e){System.out.println(e);} //card_surface = (BufferedImage)transpImg2; */ } } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload