java調整圖片的亮度

WilMcCray 8年前發布 | 5K 次閱讀 Java 圖片
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);

        }

    }

}
 本文由用戶 WilMcCray 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!