⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 somimagetester.java

📁 拥有图形界面的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        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 + -