java调整图片的亮度

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
package cn.outofmemory.snippets.desktop;

import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.RescaleOp;

public class BufferedImageSaturation {

    static BufferedImage image;
    static boolean imageLoaded = false;

    public static void main(String[] args) {

        // The ImageObserver implementation to observe loading of the image
        ImageObserver myImageObserver = new ImageObserver() {
          public boolean imageUpdate(Image image, int flags, int x, int y, int width, int height) {
            if ((flags & ALLBITS) != 0) {
              imageLoaded = true;
              System.out.println("Image loading finished!");
              return false;
            }
            return true;
          }
        };

        // The image URL - change to where your image file is located!
        String imageURL = "image.png";

        /*
         * This call returns immediately and pixels are loaded in the background
         * We use an ImageObserver to be notified when the loading of the image
         * is complete
         */
        Image sourceImage = Toolkit.getDefaultToolkit().getImage(imageURL);
        sourceImage.getWidth(myImageObserver);

        // We wait until the image is fully loaded
        while (!imageLoaded) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
            }
        }

        // Create a buffered image from the source image with a format that's compatible with the screen
        GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();
        GraphicsConfiguration graphicsConfiguration = graphicsDevice.getDefaultConfiguration();

        // If the source image has no alpha info use Transparency.OPAQUE instead
        image = graphicsConfiguration.createCompatibleImage(sourceImage.getWidth(null), sourceImage.getHeight(null), Transparency.BITMASK);

        // Copy image to buffered image
        Graphics graphics = image.createGraphics();

        // Paint the image onto the buffered image
        graphics.drawImage(sourceImage, 0, 0, null);
        graphics.dispose();

        // Brighten the image by 20%
        float scaleFactor = 1.2f;
        RescaleOp op = new RescaleOp(scaleFactor, 0, null);
        image = op.filter(image, null);

        // Darken the image by 5%
        scaleFactor = 0.5f;
        op = new RescaleOp(scaleFactor, 0, null);
        image = op.filter(image, null);

        // Create frame with specific title
        Frame frame = new Frame("Example Frame");

        // Add a component with a custom paint method
        frame.add(new CustomPaintComponent());

        // Display the frame
        int frameWidth = 300;
        int frameHeight = 300;
        frame.setSize(frameWidth, frameHeight);

        frame.setVisible(true);

    }

    /*
     * To draw on the screen, it is first necessary to subclass a Component and
     * override its paint() method. The paint() method is automatically called
     * by the windowing system whenever component's area needs to be repainted.
     */
    static class CustomPaintComponent extends Component {

        public void paint(Graphics g) {

            // Retrieve the graphics context; this object is used to paint
            // shapes
            Graphics2D g2d = (Graphics2D) g;

            /*
             * Draw an Image object The coordinate system of a graphics context
             * is such that the origin is at the northwest corner and x-axis
             * increases toward the right while the y-axis increases toward the
             * bottom.
             */
            int x = 0;
            int y = 0;
            g2d.drawImage(image, x, y, this);

        }

    }

}

标签: isp

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Java中CountDownLatch用法

下一篇:java JNI: C 语言调用 Java 方法示例