5

次のようなRGBピクセルの整数配列があります。

pixels[0] = <rgb-value of pixel(0,0)>
pixels[1] = <rgb-value of pixel(1,0)>
pixels[2] = <rgb-value of pixel(2,0)>
pixels[3] = <rgb-value of pixel(0,1)>
...etc...

そして、そこから BufferedImage を作成しようとしています。私は次のことを試しました:

BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
img.getRaster().setPixels(0, 0, width, height, pixels);

しかし、結果として得られる画像には、カラー バンドに関する問題があります。画像が不鮮明で、斜めの線と横の線があります。

RGB値で画像を初期化する適切な方法は何ですか?

編集:私の画像は次のようになります代替テキスト

ありがとう、ジェフ

4

3 に答える 3

4

setDataElementsの代わりに試してくださいsetPixels

別のオプションは、イメージがアレイからコピーするのではなく、アレイを共有することです (例については、この回答を参照してください)。

于 2011-01-06T17:45:24.170 に答える
1

単一の配列値でそれを行う方法がわかりません。TYPE_INT_RGB を使用する場合、色を指定するには 3 つの配列値が必要だと思います。

import java.awt.*;
import java.awt.image.*;
import javax.swing.*;

public class ImageFromArray2 extends JFrame
{
    int width = 50;
    int height = 50;
    int imageSize = width * height;

    public ImageFromArray2()
    {
        JPanel panel = new JPanel();
        getContentPane().add( panel );
        int[] pixels = new int[imageSize * 3];

        //  Create Red Image

        for (int i = 0; i < imageSize * 3; i += 3)
        {
            pixels[i] = 255;
            pixels[i+1] = 0;
            pixels[i+2] = 0;
        }

        panel.add( createImageLabel(pixels) );

        //  Create Green Image

        for (int i = 0; i < imageSize * 3; i += 3)
        {
            pixels[i] = 0;
            pixels[i+1] = 255;
            pixels[i+2] = 0;
        }

        panel.add( createImageLabel(pixels) );

        //  Create Blue Image

        for (int i = 0; i < imageSize * 3; i += 3)
        {
            pixels[i] = 0;
            pixels[i+1] = 0;
            pixels[i+2] = 255;
        }

        panel.add( createImageLabel(pixels) );

        //  Create Cyan Image

        for (int i = 0; i < imageSize * 3; i += 3)
        {
            pixels[i] = 0;
            pixels[i+1] = 255;
            pixels[i+2] = 255;
        }

        panel.add( createImageLabel(pixels) );

    }

    private JLabel createImageLabel(int[] pixels)
    {
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        WritableRaster raster = image.getRaster();
        raster.setPixels(0, 0, width, height, pixels);
        JLabel label = new JLabel( new ImageIcon(image) );
        return label;
    }

    public static void main(String args[])
    {
        JFrame frame = new ImageFromArray2();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setLocationRelativeTo( null );
        frame.setVisible( true );
    }
}
于 2011-01-06T17:45:28.707 に答える
-1

正しい画像を取得できない理由は、次に行う各ピクセルを適切に設定するために、これらのピクセルにRGBカラーが含まれているためです。

double[] pixelsArr=new double[4];
pixelsArr[0]=(Integer.parseInt(string2.trim())>>16) & 0xFF;
pixelsArr[1]=(Integer.parseInt(string2.trim())>>8) & 0xFF;
pixelsArr[2]=(Integer.parseInt(string2.trim())) & 0xFF;
pixelsArr[3]=0xFF;
img.getRaster().setPixels(col,row,1,1, pixelsArr);

string2は整数ピクセルです。colは各ピクセルと行の位置が同じで、1,1は各ピクセルのサイズです。

于 2013-02-08T19:48:45.280 に答える