package nbtool.gui.logviews.images; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; import nbtool.data.log.Block; import nbtool.gui.logviews.misc.ViewParent; import nbtool.util.SharedConstants; import nbtool.util.Utility; public class ImageView extends ViewParent implements MouseMotionListener { BufferedImage img; private String label = null; public void paintComponent(Graphics g) { super.paintComponent(g); if (img != null) g.drawImage(img, 0, 0, null); if (label != null) g.drawString(label, 10, img.getHeight() + 20); } public ImageView() { super(); setLayout(null); this.addMouseMotionListener(this); } @Override public void mouseDragged(MouseEvent e) {} @Override public void mouseMoved(MouseEvent e) { if (img == null || displayedLog == null) return; int col = e.getX(); int row = e.getY(); if (col < 0 || row < 0 || col >= img.getWidth() || row >= img.getHeight()) return; boolean first = (col & 1) == 0; int cbase = (col & ~1); int i = (row * img.getWidth() * 2) + (cbase * 2); Block image = displayedLog.blocks.get(0); int y = image.data[first ? i : i + 2] & 0xff; int u = image.data[i + 1] & 0xff; int v = image.data[i + 3] & 0xff; label = String.format("(%d,%d): y=%d u=%d v=%d", col, row, y, u, v); repaint(); } @Override public void setupDisplay() { this.img = displayedLog.blocks.get(0).parseAsYUVImage().toBufferedImage(); repaint(); } @Override public String[] displayableTypes() { return new String[]{SharedConstants.LogClass_Tripoint(), SharedConstants.LogClass_YUVImage()}; } }