import javax.swing.*; import java.awt.datatransfer.*; import java.awt.dnd.*; import java.awt.image.BufferedImage; import java.awt.Color; import javax.imageio.ImageIO; import java.io.File; import java.io.IOException; import java.util.List; import java.util.ArrayList; public class Main { static List hexCodes = new ArrayList<>(); static int imageWidth = 0; static int imageHeight = 0; public static void main(String[] args) { JFrame frame = new JFrame("Drag and Drop Image"); frame.setSize(400, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel label = new JLabel("Drop an image file here", SwingConstants.CENTER); label.setFont(label.getFont().deriveFont(16f)); frame.add(label); new DropTarget(frame, new DropTargetListener() { @Override public void dragEnter(DropTargetDragEvent dtde) {} @Override public void dragOver(DropTargetDragEvent dtde) {} @Override public void dropActionChanged(DropTargetDragEvent dtde) {} @Override public void dragExit(DropTargetEvent dte) {} @Override public void drop(DropTargetDropEvent dtde) { try { dtde.acceptDrop(DnDConstants.ACTION_COPY); @SuppressWarnings("unchecked") List files = (List) dtde.getTransferable() .getTransferData(DataFlavor.javaFileListFlavor); for (File file : files) { if (isImageFile(file)) { hexCodes.clear(); processImage(file); System.out.println("FINISHED"); reconstructImageFromHexCodes(); frame.dispose(); return; } } } catch (Exception e) { e.printStackTrace(); } } }); frame.setLocationRelativeTo(null); frame.setVisible(true); } private static boolean isImageFile(File f) { String[] exts = {"png", "jpg", "jpeg", "bmp", "gif"}; String name = f.getName().toLowerCase(); for (String ext : exts) { if (name.endsWith(ext)) return true; } return false; } private static void processImage(File file) { try { BufferedImage img = ImageIO.read(file); if (img == null) { return; } int w = img.getWidth(); int h = img.getHeight(); imageWidth = w; imageHeight = h; for (int y = 0; y < h; y++) { StringBuilder rowHex = new StringBuilder(); for (int x = 0; x < w; x++) { int pixel = img.getRGB(x, y); int r = (pixel >> 16) & 0xFF; int g = (pixel >> 8) & 0xFF; int b = pixel & 0xFF; String hex = String.format("#%02X%02X%02X", r, g, b); hexCodes.add(hex); rowHex.append(hex).append(" "); } System.out.println(rowHex.toString().trim()); System.out.println("NEXT ROW"); } } catch (IOException e) { } } private static void reconstructImageFromHexCodes() { if (hexCodes.isEmpty() || imageWidth == 0 || imageHeight == 0) { return; } BufferedImage newImage = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB); int index = 0; for (int y = 0; y < imageHeight; y++) { for (int x = 0; x < imageWidth; x++) { String hex = hexCodes.get(index++); int rgb = ColorFromHex(hex); newImage.setRGB(x, y, rgb); } } SwingUtilities.invokeLater(() -> { JFrame displayFrame = new JFrame("Display"); displayFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); displayFrame.setSize(imageWidth, imageHeight); JLabel label = new JLabel(new ImageIcon(newImage)); displayFrame.add(label); displayFrame.pack(); displayFrame.setLocationRelativeTo(null); displayFrame.setVisible(true); }); } private static int ColorFromHex(String hex) { if (hex.startsWith("#")) { hex = hex.substring(1); } int r = Integer.parseInt(hex.substring(0, 2), 16); int g = Integer.parseInt(hex.substring(2, 4), 16); int b = Integer.parseInt(hex.substring(4, 6), 16); return (r << 16) | (g << 8) | b; } }