0
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;
import javax.imageio.*;
import javax.swing.*;

public class CreateImage extends Component{

    BufferedImage img;

    int pixel = 265*190;
    int steg = 3;
    int p,s;
    int [][] rgb_steg = new int [pixel][steg];



     public CreateImage()throws Exception{


        try{
            img = ImageIO.read(new File("cover-fruits.jpg"));
        }catch (IOException e){

        }



        File f = new File("stego_rgb.txt");
        if(!(f.exists())){
            System.out.println("Sorry file are not exist");
            System.exit(0);
        }


        Scanner in = new Scanner(f);
        String data = null;
        int rgb = 0;
        int rgb1 = 0;
        p=0;


        while(in.hasNextInt()){
            data = in.nextLine();
            StringTokenizer st = new StringTokenizer(data," ");
            for(s=0;s<steg;s++){
                rgb = Integer.parseInt(st.nextToken());
                rgb_steg[p][s] = rgb;
                rgb1 = rgb_steg[p][s];
            }
            p++;


        }




         for(int y = 0 ; y <img.getHeight() ; y++){
               for(int x = 0; x < img.getWidth() ; x++){
                   img.setRGB(x, y, rgb1);
               }
           }





    File output = new File("saved.png");
    ImageIO.write(img , "png", output);

    img  = ImageIO.read(new File("saved.png"));



    }

       public static void main(String[] args) throws Exception{
        JFrame f = new JFrame("Load Image");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e){
                System.exit(0);
            }
});

        f.add(new CreateImage());
        f.pack();
        f.setVisible(true);
    }





}

.txt から RGB 値を読み取ってイメージを作成しようとしていますが、うまくいきませんでした。ピクセル値から画像を作成することからいくつかのアイデアがあります が、まだ取得できませんでした。誰でも私を助けてくれることを願っています。

4

1 に答える 1

0

ハードコーディングされた値でイメージを作成する簡単な例を次に示します。配列値の人口を動的にするのはそれほど難しいことではありません。

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 * 3;

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

        //  Create Red Image

        for (int i = 0; i < imageSize; 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; 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; 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; 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 );
    }
}

単純な配列を使用しますが、各ピクセルの RGB 値を指定するには 3 つのスロットが必要です。

于 2013-06-21T05:23:10.793 に答える