0

私はrgbイメージを持っていて、バイナリイメージ0-255を変換したいと思います。

RGB画像とピクセルでしきい値を計算します。グレーレベル画像では、しきい値よりも大きく、赤=255緑=255および青=255に設定し、しきい値よりも低く設定します。赤=0緑=0および青=0に設定します。

private static int colorToRGB(int alpha, int red, int green, int blue) {
    int newPixel = 0;
    newPixel += alpha;
    newPixel = newPixel << 8;
    newPixel += red; newPixel = newPixel << 8;
    newPixel += green; newPixel = newPixel << 8;
    newPixel += blue;
    System.out.println("asd"  + newPixel);
    return newPixel;
}

newPixelの値-16777216(ピクセルが白の場合)newPixelの値-1(ピクセルが黒の場合)

アルファ値は定数255です。ピクセルの値0と255が必要なため、どこが間違っていますか。

BufferedImageタイプはTYPE_INT_ARGBです

助けてくれてありがとう

4

3 に答える 3

1

正直なところ、あなたの質問は私にはあまり意味がありません。だから私はいくつかの仮定をしてあなたの質問に答えます:

  1. あなたはグローバルしきい値を持っています[0-255]
  2. しきい値はグレースケール値に適用する必要があるため、RGB ピクセルをグレースケール値に変換する必要があります。
  3. 手続きはできるだけ迅速に行う必要があります
  4. あなたはJavaでそれをしたい

この関数は、RGB カラーとしきい値を受け取り、黒または白のいずれかを返します。

public static int treshold(final int sourceColor, final int treshold) {
    // green channel is a good approximation of rgb intensity
    int green = (sourceColor >> 8) & 0xFF;
    if (green < treshold) {
        return 0xFF000000;
    } else {
        return 0xFFFFFFFF;
    }
}
于 2012-04-14T21:02:34.563 に答える
0

int newPixel = (alpha << 24) | (red << 16) | (green << 8) | blue;

これにより、色が0xAARRGGBBとしてエンコードされます。これは、おそらく必要なものです。

于 2012-04-14T20:59:27.053 に答える
0

透明な青色 (アルファ 0、赤 0、緑 0、青 0 ~ 255) でない限り、ピクセルの値は 0 ~ 255 になりません。アルファ、赤、緑、青はそれぞれ 0 ~ 255 の範囲ですが、それらを合わせると、はるかに大きくなります。アルファ値が 255 の場合、整数の先頭が 1 になります。先頭の 1 は、整数が負であることを示します。あなたの最終的な値は正しいです。また、Torious は方程式を短縮しているだけですが、どちらの計算も正常に機能します。

于 2012-04-26T00:26:24.793 に答える