java - java中的RGB图像过滤器

标签 java image filter

我希望我的照片看起来像这样:

enter image description here

我想通过按按钮来过滤图像。
目前,我有一个 BufferedImage,但我不知道如何设置像素。

这会将我的图片转换为蓝色图片,但我不知道为什么以及如何设置绿色和红色?

        int width = img.getWidth();
        int height = img.getHeight();

        for(int y = 0; y < height; y++){
          for(int x = 0; x < width; x++){
            int p = img.getRGB(x,y);

            int r = (p>>16)&0xff;
            int g = (p>>8)&0xff;
            int b = p & 0xff;

            img.setRGB(x,y,r);
          }
        }
        this.lblFilteredImage.setIcon(new ImageIcon(img));

最佳答案

获得单独的彩色图像的一种方法是将其他颜色归零。

RGB Display

此 GUI 模型类通过更改掩码位从原始图像生成红色、绿色和蓝色图像。

package com.ggl.rgbdisplay.model;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.image.BufferedImage;

public class RGBDisplayModel {

    private BufferedImage originalImage;
    private BufferedImage redImage;
    private BufferedImage greenImage;
    private BufferedImage blueImage;

    public BufferedImage getOriginalImage() {
        return originalImage;
    }

    public void setOriginalImage(BufferedImage originalImage) {
        this.originalImage = originalImage;
        this.redImage = createColorImage(originalImage, 0xFFFF0000);
        this.greenImage = createColorImage(originalImage, 0xFF00FF00);
        this.blueImage = createColorImage(originalImage, 0xFF0000FF);
    }

    public BufferedImage getRedImage() {
        return redImage;
    }

    public BufferedImage getGreenImage() {
        return greenImage;
    }

    public BufferedImage getBlueImage() {
        return blueImage;
    }

    public static BufferedImage createTestImage() {
        BufferedImage bufferedImage = new BufferedImage(200, 200,
                BufferedImage.TYPE_INT_ARGB);
        Graphics g = bufferedImage.getGraphics();

        for (int y = 0; y < bufferedImage.getHeight(); y += 20) {
            if (y % 40 == 0) {
                g.setColor(Color.WHITE);
            } else {
                g.setColor(Color.BLACK);
            }
            g.fillRect(0, y, bufferedImage.getWidth(), 20);
        }

        g.dispose();
        return bufferedImage;
    }

    private BufferedImage createColorImage(BufferedImage originalImage, int mask) {
        BufferedImage colorImage = new BufferedImage(originalImage.getWidth(),
                originalImage.getHeight(), originalImage.getType());

        for (int x = 0; x < originalImage.getWidth(); x++) {
            for (int y = 0; y < originalImage.getHeight(); y++) {
                int pixel = originalImage.getRGB(x, y) & mask;
                colorImage.setRGB(x, y, pixel);
            }
        }

        return colorImage;
    }

}

关于java - java中的RGB图像过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39667665/

相关文章:

ios - ALAssets 的 NSPredicate 和 NSArray

java - 放大高低值阻尼器

java - 我不知道为什么我的主类没有从我的 Gameplay 类获取数据

css - 使用 Sublime Text 编码 - 在 css 中遇到文件路径问题

java - 单击按钮后在弹出窗口中显示图像 - Android/Java

github - 我可以使用逻辑运算符 OR 搜索 github 标签吗?

java - 具有空对象模式的 DAO

java - 在正则表达式中悬挂元字符 + 来检测 GaussianRational

ruby-on-rails - 直接显示使用 chunkypng 创建的图像(不保存)

java - 身份验证过滤器未加载 3 个网页的 css