Java の WritableRaster クラスの仕組みがわかりません。ドキュメントを見てみましたが、ピクセルの配列から値を取得する方法がわかりません。さらに、ピクセルの配列が何で構成されているかわかりません。
ここで説明します。
私がやりたいことは: 画像に関する Shamir の秘密の共有です。そのためには、BuferedImage イメージでイメージをフェッチする必要があります。秘密の画像を撮ります。画像の各ピクセルで「関数」を実行して共有を作成します。(基本的にはピクセル値を何かで変更します)
スニペット:
int w = image.getWidth();
int h = image.getHeight();
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
int pixel = image.getRGB(j, i);
int red = (pixel >> 16) & 0xFF;
int green = (pixel >> 8) & 0xFF;
int blue = (pixel) & 0xFF;
pixels[j][i] = share1(red, green, blue);
// これらの RGB 値を取得します。関数を使用してそれらを変更し、int 値を返します。このようなもの:
public int share1 (r, g, b)
{
a1 = rand.nextInt(primeNumber);
total1 = r+g+b+a1;
new_pixel = total1 % primeNumber;
return new_pixel;
}
// この 2 次元配列のピクセルには新しい色の値がすべて含まれていますよね? しかし今、この新しい値を使用してイメージを構築したいと考えています。だから私がしたことはです。最初に、このピクセル配列をリストに変換しました。このリストには、新しい画像のピクセル値が含まれています。しかし、RasterObj.setPixels() メソッドを使用して画像を作成するには、RGB 値の配列が必要です [私はここで間違っている可能性があります!] リストの個々の値を取得し、rgb 値を見つけて、新しい 1D 配列 pixelvector に連続して配置します..このようなもの(r1、g1、b1、r2、g2、b2、r3、g3、b3 ...)
各ピクセルの単一のピクセル値が含まれているため、リストのサイズは w h です。ただし、各ピクセルの r、g、b 値が含まれているため、新しい配列 pixelvector のサイズは w h*3 になります。
次に、画像を形成するためにこれを行います:スニペット
BufferedImage image_share1 = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
WritableRaster rast = (WritableRaster) image_share1.getData();
rast.setPixels(0, 0, w, h, pixelvector);
image_share1.setData(rast);
ImageIO.write(image_share1,"JPG",new File("share1.jpg"));
setPixels() メソッドに単一のピクセル値を持つ配列を配置すると、その関数から返されません! しかし、個別のr、g、b値を持つ配列を配置すると、関数から返されます。しかし、 share1 、 share 2 などに対して同じことを行っています。青の色合いしか得られません。そのため、画像を再構築できるかどうかさえわかりません..
PS - これは私が知っている非常にばかげたコードのように見えるかもしれません。しかし、これを行い、Java で画像について学ぶのに 1 日しかありませんでした。だから私はできる限りのことをしています。
ありがとう..