Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaで画像のピクセル(RGB値)を設定・変更する方法

ピクセルとはデジタル画像を構成する最小単位の要素であり、各ピクセルにはアルファ(透明度)、赤、緑、青の4つの値が含まれています。ピクセル値は32ビットのメモリ領域に、ARGBの順序で各8ビットずつ格納されています。そのため、画像の色を変更するには、以下の手順を実行する必要があります。

  • 画像内のすべてのピクセルを順番にループ処理する。
  • getRGB()メソッドを使用してピクセル値を取得する。
  • ピクセル値からARGB値を取り出す。
  • RGB値に対して必要な変更を加える。
  • 変更後のRGB値で新しいピクセル値を作成する。
  • setRGB()メソッドを使用して新しいピクセル値を設定する。

ARGB値を設定する方法

まず、ピクセル値を引数として渡し、Colorオブジェクトをインスタンス化します。次に、getRed()、getGreen()、getBlue()の各メソッドを使って、赤・緑・青の値をそれぞれ取得します。変更後の値を画像に書き戻すには、以下の手順を行います。

  • 新しいRGB値を引数として渡して、Colorオブジェクトを作成する。
  • ColorクラスのgetRGB()メソッドを使用して、カラーオブジェクトからピクセル値を取得する。
  • x座標・y座標と新しいピクセル値をsetRGB()メソッドに渡し、新しいピクセル値を画像に設定する。

サンプルコード

import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;

public class SetPixels {
    public static void main(String args[]) throws IOException {
        // 画像を読み込む
        File file = new File("D:\\Images\\cat.jpg");
        BufferedImage img = ImageIO.read(file);

        for (int y = 0; y < img.getHeight(); y++) {
            for (int x = 0; x < img.getWidth(); x++) {
                // ピクセルの内容を取得
                int pixel = img.getRGB(x, y);
                // ピクセル値からColorオブジェクトを生成
                Color color = new Color(pixel, true);
                // R・G・Bの値を取り出す
                int red = color.getRed();
                int green = color.getGreen();
                int blue = color.getBlue();
                // RGB値を変更する
                green = 150;
                blue = 150;
                // 新しいColorオブジェクトを作成
                color = new Color(red, green, blue);
                // 新しい色を画像に設定
                img.setRGB(x, y, color.getRGB());
            }
        }
        // 変更後の画像を保存する
        file = new File("D:\\Images\\setting_pixels.jpg");
        ImageIO.write(img, "jpg", file);
        System.out.println("Done...");
    }
}

入力画像

Javaで画像のピクセル(RGB値)を設定・変更する方法

出力画像

Javaで画像のピクセル(RGB値)を設定・変更する方法

シフト演算子を使ってARGB値を設定する方法

ピクセル値から各成分を取り出すには、対象となる色の開始ビット位置まで右シフトを行います。アルファは24ビット、赤は16ビットといった具合です。その後、0xFFとのビット単位のAND演算を実行します。これにより、下位8ビットのみが残り、それ以外のビットはマスクされて無視されます。

逆に、ARGBの各値をそれぞれのビット位置まで左シフトし、ビット単位のOR演算で結合することで、新しいピクセル値を再構築することができます。

// 新しいRGB値を設定する
p = (a<<24) | (r<<16) | (g<<8) | b;
img.setRGB(x, y, p);
  1. Javaで画像をネガティブ(反転)に変換する方法|アルゴリズムと実装コードをわかりやすく解説

    画像をネガティブに変換するアルゴリズムカラー画像をネガティブ(階調反転)画像に変換する仕組みは非常にシンプルです。基本となる手順は以下の4ステップです。各ピクセルの赤(R)・緑(G)・青(B)の値を取得するそれぞれの色の値を255から引き算し、新しい色の値として保存する変更後の3つの色の値から、新しいピクセル値を生成するその新しい値を元のピクセルに設定するこの「255からの減算」により、明るい部分は暗く、暗い部分は明るくなり、写真のネガフィルムのような反転画像が完成します。Javaによる実装手順Javaでは、標準ライブラリの ImageIO クラスや Color クラスを利用することで、Ope

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列