2013-06-21 65 views
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值並創建image.But但我沒有設法執行此操作。 我有一些想法從Creating Image from Pixel Values 但仍然無法得到它。 希望任何人都可以幫助我。如何從已保存在.txt中的RGB值創建圖像

+0

您如何知道文本字段中圖像的寬度/高度? – MadProgrammer

+0

我設置圖像的寬度/高度僅用於測試。 其實我們可以通過.getheight()和.getWidth() –

回答

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); 
    } 
} 

它使用一個簡單的數組,但需要3個插槽來指定每個像素的RGB值。

+0

camickr獲得圖像的寬度/高度,我還沒有得到回答我的問題,並不能帶來了我的問題是新的,它現在得下來的名單,請幫助我在這裏.. http://stackoverflow.com/questions/17220399/cannot-instantiate-a-class-using-a-button –

+0

camickr,tenx爲code.it幫助我。 其實我有問題要讀取.txt的RGB值 我希望讀取rgb.txt並從該值創建圖像。 –

+0

'實際上我有問題要讀取.txt中的RGB值 - @noobprogrammer,所以發佈你的'SSCCE'來展示你如何讀取文件並將整數值添加到數組中。 – camickr