📄 somimagetester.java
字号:
repaint(); } /** * @param args the command line arguments */ public static void main(String args[]) { new SOMImageTester().show(); } /** Getter for property DrawSizeX. * @return Value of property DrawSizeX. * */ public int getDrawSizeX() { return DrawSizeX; } /** Setter for property DrawSizeX. * @param DrawSizeX New value of property DrawSizeX. * */ public void setDrawSizeX(int DrawSizeX) { this.DrawSizeX = DrawSizeX; } /** Getter for property DrawSizeY. * @return Value of property DrawSizeY. * */ public int getDrawSizeY() { return DrawSizeY; } /** Setter for property DrawSizeY. * @param DrawSizeY New value of property DrawSizeY. * */ public void setDrawSizeY(int DrawSizeY) { this.DrawSizeY = DrawSizeY; } /** Getter for property ScaleSizeX. * @return Value of property ScaleSizeX. * */ public int getScaleSizeX() { return ScaleSizeX; } /** Setter for property ScaleSizeX. * @param ScaleSizeX New value of property ScaleSizeX. * */ public void setScaleSizeX(int ScaleSizeX) { this.ScaleSizeX = ScaleSizeX; } /** Getter for property ScaleSizeY. * @return Value of property ScaleSizeY. * */ public int getScaleSizeY() { return ScaleSizeY; } /** Setter for property ScaleSizeY. * @param ScaleSizeY New value of property ScaleSizeY. * */ public void setScaleSizeY(int ScaleSizeY) { this.ScaleSizeY = ScaleSizeY; } /** * Clears the current image to white. */ public void clearCurrentImage() { drawImage.getGraphics().setColor(java.awt.Color.WHITE); drawImage.getGraphics().fillRect(0,0, drawImage.getWidth(),drawImage.getHeight()); downSample(); repaint(); } /** * Creates a new image and updates the scroll bar values. */ public void NewImage() { if ( imageHolder != null) { if ( idHolder != null ) { downSample = new java.awt.image.BufferedImage(getScaleSizeX(),getScaleSizeY(),java.awt.image.BufferedImage.TYPE_INT_RGB); drawImage = new java.awt.image.BufferedImage(getDrawSizeX(),getDrawSizeY(),java.awt.image.BufferedImage.TYPE_INT_RGB); clearCurrentImage(); Integer cur_id = (Integer)idHolder.get(currentImage-1); currentImage++; imageHolder.add(drawImage); idHolder.add(cur_id); IDInputTextField.setText(""+cur_id.intValue()); ImageScrollBar.setMaximum(currentImage); ImageScrollBar.setValue(currentImage); ((ImagePainter)PainterPanel).setImageToEdit(drawImage); ((ImageDrawer)DownsamplePanel).setImageToDraw(downsamplePreviewImage); ImageNoLabel.setText("Image 1 of "+currentImage); repaint(); } } } /** * This method is called internally to * see if there are any pixels in the given * scan line. This method is used to perform * autocropping. * * @param y The horizontal line to scan. * @return True if there were any pixels in this * horizontal line. */ protected boolean hLineClear(int y) { int w = drawImage.getWidth(this); for ( int i=0;i<w;i++ ) { if ( pixelMap[(y*w)+i] !=-1 ) return false; } return true; } /** * This method is called to determine .... * * @param x The vertical line to scan. * @return True if there are any pixels in the * specified vertical line. */ protected boolean vLineClear(int x) { int w = drawImage.getWidth(this); int h = drawImage.getHeight(this); for ( int i=0;i<h;i++ ) { if ( pixelMap[(i*w)+x] !=-1 ) return false; } return true; } /** * This method is called to automatically * crop the image so that whitespace is * removed. * * @param w The width of the image. * @param h The height of the image */ protected void findBounds(int w,int h) { // top line for ( int y=0;y<h;y++ ) { if ( !hLineClear(y) ) { downSampleTop=y; break; } } // bottom line for ( int y=h-1;y>=0;y-- ) { if ( !hLineClear(y) ) { downSampleBottom=y; break; } } // left line for ( int x=0;x<w;x++ ) { if ( !vLineClear(x) ) { downSampleLeft = x; break; } } // right line for ( int x=w-1;x>=0;x-- ) { if ( !vLineClear(x) ) { downSampleRight = x; break; } } } /** * Called to downsample a quadrant of the image. * * @param x The x coordinate of the resulting * downsample. * @param y The y coordinate of the resulting * downsample. * @return Returns true if there were ANY pixels * in the specified quadrant. */ protected boolean downSampleQuadrant(int x,int y) { int w = drawImage.getWidth(this); int startX = (int)(downSampleLeft+(x*ratioX)); int startY = (int)(downSampleTop+(y*ratioY)); int endX = (int)(startX + ratioX); int endY = (int)(startY + ratioY); for ( int yy=startY;yy<=endY;yy++ ) { for ( int xx=startX;xx<=endX;xx++ ) { int loc = xx+(yy*w); if ( pixelMap[ loc ]!= -1 ) return true; } } return false; } /** * Called to downsample the image and store * it in the down sample component. */ public void downSample() { int w = drawImage.getWidth(this); int h = drawImage.getHeight(this); java.awt.image.PixelGrabber grabber = new java.awt.image.PixelGrabber(drawImage,0,0,w,h,true); try { grabber.grabPixels(); pixelMap = (int[])grabber.getPixels(); findBounds(w,h); // now downsample ratioX = (double)(downSampleRight - downSampleLeft)/(double)downSample.getWidth(); ratioY = (double)(downSampleBottom - downSampleTop)/(double)downSample.getHeight(); for ( int y=0;y<downSample.getHeight();y++ ) { for ( int x=0;x<downSample.getWidth();x++ ) { if ( downSampleQuadrant(x,y) ) downSample.setRGB(x,y,java.awt.Color.BLACK.getRGB()); else downSample.setRGB(x,y,java.awt.Color.WHITE.getRGB()); } } // We have now down sampled the current draw image to the downSample image. // Now produce a large sclae version of the down sample so user can see it. downsamplePreviewImage = downSample.getScaledInstance(getDrawSizeX(), getDrawSizeY(), java.awt.Image.SCALE_DEFAULT); if ( downsamplePreviewImage!= null) { ((ImageDrawer)DownsamplePanel).setImageToDraw(downsamplePreviewImage); } } catch ( InterruptedException e ) { } } public void SaveImagesOut() { FileOutputStream joone_file = null; DataOutputStream joone_out = null; javax.swing.JFileChooser choose = new javax.swing.JFileChooser(); int result = choose.showSaveDialog(this); try { if ( result == javax.swing.JFileChooser.APPROVE_OPTION ) { joone_file = new FileOutputStream(choose.getSelectedFile()); joone_out = new DataOutputStream(joone_file); for ( int i=0;i<imageHolder.size();i++) { drawImage = (java.awt.image.BufferedImage)imageHolder.get(i); downSample(); for ( int y=0;y<downSample.getHeight();y++) { for ( int x=0;x<downSample.getWidth();x++) { if ( downSample.getRGB(x,y) == java.awt.Color.BLACK.getRGB() ) joone_out.writeBytes("1.0;"); else joone_out.writeBytes("0.0;"); } } joone_out.writeBytes(((Integer)idHolder.get(i)).intValue()+"\n"); } } } catch(IOException ex) { javax.swing.JOptionPane.showInternalMessageDialog(this,"An error occurred while trying to write to the file. Error is "+ex.toString()); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton ClearImageButton; private javax.swing.JPanel ControlPanel; private javax.swing.JButton DownSampleButton; private javax.swing.JPanel DownsamplePanel; private javax.swing.JButton HelpButton; private javax.swing.JTextField IDInputTextField; private javax.swing.JPanel ImageHolderPanel; private javax.swing.JLabel ImageIDLabel; private javax.swing.JLabel ImageNoLabel; private javax.swing.JScrollBar ImageScrollBar; private javax.swing.JPanel InfoPanel; private javax.swing.JButton NewImageButton; private javax.swing.JPanel PainterPanel; private javax.swing.JButton QuitButton; private javax.swing.JButton SaveImagesButton; // End of variables declaration//GEN-END:variables }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -