Хочу создать программку имитирующую волну на изображении, сам эффект волны уже создал(нужно в параметрах его доработать), а вот теперь пытаюсь запустить его, то есть чтобы волна пробегала по изображению... создаю класс, делаю его Runnable - но от чего-то поток не запускается да и ошибку не выдает... ? Вот сам код: Код | // Изменение масштаба части изображения
import static java.awt.Color.*;
import java.awt.Image; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage;
import javax.imageio.ImageIO; import java.io.File; import java.io.IOException;
import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; import javax.swing.UIManager;
import java.awt.AlphaComposite; import java.awt.Graphics2D;
class PreviewZoomImage extends JFrame { private Image image; private JLabel drawLabel; // ширина изображения private int width; // высота изображения private int height; // копия буфера изображения private BufferedImage bufferedImage; // цвет пикселя private Color color; //коэфициент света private int conf=3; public PreviewZoomImage() { setTitle("PreviewImage");
try { image = ImageIO.read(new File("diablo_3_icon.jpg")); bufferedImage = ImageIO.read(new File("diablo_3_icon.jpg")); } catch (IOException ex) { ex.printStackTrace(); }
width = image.getWidth(this); height = image.getHeight(this); setLocationRelativeTo(null); setSize(width, height);
setMaximizedBounds(new Rectangle(width, height));
drawLabel = new DrawPanel();
add(drawLabel);
setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); }
public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { } SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JFrame frame = new PreviewZoomImage(); frame.setDefaultCloseOperation(EXIT_ON_CLOSE); } }); } public class DrawPanel extends JLabel implements Runnable { private int check=1; @Override public void run() { check=0; while (check<300) { check+=1; repaint(); try { Thread.sleep(5); } catch (InterruptedException ex) { } } } private long t = System.nanoTime(); public void paintComponent(Graphics g) { long tm = System.nanoTime() - t; System.out.println(check); g.drawImage(image, 0, 0, width, height, null); g.setColor(color); for ( int i=0 ; i< 30 ; i++ ){ double x = ( Math.PI/2 )*( (double) (i/30) ); for ( int j=0 ; j < height ; j++ ) { int c = bufferedImage.getRGB(i+check, j); int red = (c & 0x00ff0000) >> 16; int green = (c & 0x0000ff00) >> 8; int blue = c & 0x000000ff; double dR,dG,dB; dR=-30*conf*Math.sin( x ); dG=-30*conf*Math.sin( x ); dB=-30*conf*Math.sin( x ); if (red + dR < 0) red = 0; else if (red + dR > 255) red = 255; else red += dR; if (green + dG < 0) green = 0; else if (green + dG > 255) green = 255; else green += dG; if (blue + dB < 0) blue = 0; else if (blue + dB > 255) blue = 255; else blue += dB; color = new Color(red,green,blue); g.setColor(color); g.drawLine(i+check, j, i+check, j); } } for (int i=0;i<30;i++){ double x = (Math.PI/2 ); x *= (double) (30-i)/30; for (int j=0;j<height;j++) { int c = bufferedImage.getRGB(i+30+check, j); int red = (c & 0x00ff0000) >> 16; int green = (c & 0x0000ff00) >> 8; int blue = c & 0x000000ff; double dR,dG,dB; dR=30*conf*Math.sin( x ); dG=30*conf*Math.sin( x ); dB=30*conf*Math.sin( x ); if (red + dR < 0) red = 0; else if (red + dR > 255) red = 255; else red += dR; if (green + dG < 0) green = 0; else if (green + dG > 255) green = 255; else green += dG; if (blue + dB < 0) blue = 0; else if (blue + dB > 255) blue = 255; else blue += dB; color = new Color(red,green,blue); g.setColor(color); g.drawLine(i+30+check, j, i+30+check, j); } }
} } }
|
|