java 中图像的一些操作

最近在弄图像的东西,可以归纳一下对图像的一些用法:

1.镜像

bi 是我面板上获得的图像,biMirror 是我镜像之后的图像

2.旋转

if (isInit) {
            BufferedImage bi = thumbViewPane.getBufferImage();
            if (bi == null) {
                return;
            }

            int nIndex = rotateList.getSelectedIndex();

            // 对Java来说,旋转方向为顺时针方向
            int nNewAngle = 0;
            switch (nIndex) {
            case 0:
                nNewAngle = 0;
                break;
            case 1:
                nNewAngle = 270;
                break;
            case 2:
                nNewAngle = 180;
                break;
            case 3:
                nNewAngle = 90;
                break;
            }

            if (nNewAngle == nAngle) {
                return;
            }

            int nWidth = bi.getWidth();
            int nHeight = bi.getHeight();

            int nRotateAngle = 0;
            if (nAngle == 0) {
                nRotateAngle = nNewAngle;
            } else {
                if (nNewAngle > nAngle) {
                    nRotateAngle = nNewAngle - nAngle;
                } else {
                    nRotateAngle = 360 - (nAngle - nNewAngle);
                }
            }
            nRadian = Math.toRadians(nRotateAngle);

            // 以图像的中心为旋转点
            AffineTransform transform = null;
            int nNewWidth = nWidth;
            int nNewHeight = nHeight;
            if (nRotateAngle == 90 || nRotateAngle == 270) {
                nNewWidth = nHeight;
                nNewHeight = nWidth;
                transform = AffineTransform.getRotateInstance(nRadian);
                if (nRotateAngle == 90) {
                    transform.translate(0, -nHeight);
                } else {
                    transform.translate(-nWidth, 0);
                }
            } else {
                transform = AffineTransform.getRotateInstance(nRadian,
                        nWidth / 2, nHeight / 2);
            }

            BufferedImage biMirror = new BufferedImage(nNewWidth, nNewHeight,
                    BufferedImage.TYPE_INT_RGB);
            Graphics2D g2d = biMirror.createGraphics();
            g2d.drawRenderedImage(bi, transform);
            thumbViewPane.setBufferImage(biMirror);

            // after image manipulation, call the garbage collector
            System.gc();

            nAngle = nNewAngle;
        }

3.放大或缩小 

在实现中,是新建了一个放大和缩小的按钮,如果点击了按钮,然后点击图像就可以在当前的图像大小的基础下放大一定的比例。 在鼠标监听事件中写的放大和缩小的函数。

    public void mouseClicked(MouseEvent e) {
            int i = e.getButton();

            if (i == MouseEvent.BUTTON1) {
                if (previewFrame.iszoomin == true
                        && ((previewFrame.zoomclickcount < 1) && (-4 < previewFrame.zoomclickcount))) {

                    BufferedImage tempimg = previewFrame.bitemp;

                    BufferedImage bi = previewFrame.bitemp;
                    if (bi == null) {
                        return;
                    }

                    int nIndex = previewFrame.rotateList.getSelectedIndex();

                    // 对Java来说,旋转方向为顺时针方向
                    int nNewAngle = 0;
                    switch (nIndex) {
                    case 0:
                        nNewAngle = 0;
                        break;
                    case 1:
                        nNewAngle = 270;
                        break;
                    case 2:
                        nNewAngle = 180;
                        break;
                    case 3:
                        nNewAngle = 90;
                        break;
                    }

                    int nWidth = bi.getWidth();
                    int nHeight = bi.getHeight();

                    double nRadian = Math.toRadians(nNewAngle);

                    // 以图像的中心为旋转点
                    AffineTransform transform = null;
                    int nNewWidth = nWidth;
                    int nNewHeight = nHeight;
                    if (nNewAngle == 90 || nNewAngle == 270) {
                        nNewWidth = nHeight;
                        nNewHeight = nWidth;
                        transform = AffineTransform.getRotateInstance(nRadian);
                        if (nNewAngle == 90) {
                            transform.translate(0, -nHeight);
                        } else {
                            transform.translate(-nWidth, 0);
                        }
                    } else {
                        transform = AffineTransform.getRotateInstance(nRadian,
                                nWidth / 2, nHeight / 2);
                    }

                    BufferedImage biMirror = new BufferedImage(nNewWidth,
                            nNewHeight, BufferedImage.TYPE_INT_RGB);
                    Graphics2D g2d = biMirror.createGraphics();
                    g2d.drawRenderedImage(bi, transform);
                    setBufferImage(biMirror);

                    previewFrame.zoomclickcount++;
                    int x = e.getX();
                    int y = e.getY();

                    AffineTransformOp op;
                    if (previewFrame.zoomclickcount > 0) {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0,
                                        previewFrame.zoomclickcount), Math.pow(
                                        2.0, previewFrame.zoomclickcount)),
                                null);
                    } else if (previewFrame.zoomclickcount == 0) {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0, 0), Math.pow(
                                        2.0, 0)), null);
                    } else {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0,
                                        previewFrame.zoomclickcount), Math.pow(
                                        2.0, previewFrame.zoomclickcount)),
                                null);
                    }
                    Image Itemp = op.filter(biMirror, null);

                    // 以图像的中心为旋转点

                    setBufferImage((BufferedImage) Itemp);
                    int imgwidth = tempimg.getWidth() / 2;
                    int imghight = tempimg.getHeight() / 2;
                    int offsetw = 2 * (x - imgwidth);
                    int offseth = 2 * (y - imghight);

                    Point p = new Point((tempimg.getWidth()) + offsetw - 300,
                            (tempimg.getHeight()) + offseth - 500);

                    scroller.getViewport().setViewSize(
                            new Dimension(tempimg.getWidth() * 2, tempimg
                                    .getHeight() * 2));

                    scroller.getViewport().setViewPosition(p);
                    setCursor(zoomincursor);
                    System.gc();

                } else if (previewFrame.iszoomout == true
                        && ((previewFrame.zoomclickcount < 2) && (-3 < previewFrame.zoomclickcount))) {
                    BufferedImage tempimg = previewFrame.bitemp;
                    BufferedImage bi = previewFrame.bitemp;
                    if (bi == null) {
                        return;
                    }
                    int nIndex = previewFrame.rotateList.getSelectedIndex();

                    // 对Java来说,旋转方向为顺时针方向
                    int nNewAngle = 0;
                    switch (nIndex) {
                    case 0:
                        nNewAngle = 0;
                        break;
                    case 1:
                        nNewAngle = 270;
                        break;
                    case 2:
                        nNewAngle = 180;
                        break;
                    case 3:
                        nNewAngle = 90;
                        break;
                    }

                    int nWidth = bi.getWidth();
                    int nHeight = bi.getHeight();

                    double nRadian = Math.toRadians(nNewAngle);

                    // 以图像的中心为旋转点
                    AffineTransform transform = null;
                    int nNewWidth = nWidth;
                    int nNewHeight = nHeight;
                    if (nNewAngle == 90 || nNewAngle == 270) {
                        nNewWidth = nHeight;
                        nNewHeight = nWidth;
                        transform = AffineTransform.getRotateInstance(nRadian);
                        if (nNewAngle == 90) {
                            transform.translate(0, -nHeight);
                        } else {
                            transform.translate(-nWidth, 0);
                        }
                    } else {
                        transform = AffineTransform.getRotateInstance(nRadian,
                                nWidth / 2, nHeight / 2);
                    }

                    BufferedImage biMirror = new BufferedImage(nNewWidth,
                            nNewHeight, BufferedImage.TYPE_INT_RGB);
                    Graphics2D g2d = biMirror.createGraphics();
                    g2d.drawRenderedImage(bi, transform);
                    setBufferImage(biMirror);

                    previewFrame.zoomclickcount--;
                    int x = e.getX();
                    int y = e.getY();

                    AffineTransformOp op;
                    if (previewFrame.zoomclickcount < 0) {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0,
                                        previewFrame.zoomclickcount), Math.pow(
                                        2.0, previewFrame.zoomclickcount)),
                                null);
                    } else if (previewFrame.zoomclickcount == 0) {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0, 0), Math.pow(
                                        2.0, 0)), null);
                    } else {
                        op = new AffineTransformOp(AffineTransform
                                .getScaleInstance(Math.pow(2.0,
                                        previewFrame.zoomclickcount), Math.pow(
                                        2.0, previewFrame.zoomclickcount)),
                                null);
                    }
                    Image Itemp = op.filter(biMirror, null);
                    setBufferImage((BufferedImage) Itemp);
                    int imgwidth = tempimg.getWidth() / 2;
                    int imghight = tempimg.getHeight() / 2;
                    int offsetw = 2 * (x - imgwidth);
                    int offseth = 2 * (y - imghight);

                    Point p = new Point((tempimg.getWidth()) + offsetw, tempimg
                            .getHeight()
                            + offseth);
                    scroller.getViewport().setViewPosition(p);
                    setCursor(zoomoutcursor);
                    System.gc();
                } else if (previewFrame.isMove == true) {
                    setCursor(new Cursor(Cursor.HAND_CURSOR));
                }

                else {
                    setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
                }
            }
            repaint();
        }

还有图像的切割,图像的擦除,图像的合并等等,这些有兴趣的可以私聊我。嘿嘿。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值