ٍسلام للجميع
--------------
من قبل كنت اتحدث عن طريقة استعمال خوارزيمة ال LSB - least significant bit البت الأقل أهمية لتشفير نص داخل صورة (( تمكنت من استعماله و تشفير النص داخل الصورة دون أن تتشوه ))
الأن نحن امام مرحلة استخراج النص من الصورة الجديدة (( قبل عملية استخراج النص ، أريد ان احفظ الصورة فى مكان ما من خلال ال showSaveDialog )) كتبت الشفيرة الخاصة بذلك و لكن مواجه فيها مشاكل فى حفظ الصورة فى المكان المحدد .
(( الجزء - الذى به خلل فى الشفيرة - الخاص بحفظ الصورة الجديدة عليه comment ))
و هناك السطر
ImageIO.write(saveBufferedImage, str, saveFile);
str >>> هو formate الصورة لم أعرف كيف أحدده
الشفيرة :
-----------
ال class TestImage
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;
public class TestImage extends JFrame {
private JPanel mainPanel;
private DisplayPanel displayPanel, stegoPanel;
private JButton openButton, saveButton, empededButton, extractButton;
private JFileChooser fileChooser;
private JScrollPane normalScrollPane, stegoScrollPane;
private JTextArea area;
private MyActionListener actionListener;
private BufferedImage saveBufferedImage;
public TestImage() {
intializeingPanel();
intializeingButtons();
fileChooser = new JFileChooser();
area = new JTextArea();
JScrollPane scrollPane = new JScrollPane(area);
scrollPane.setBounds(50, 500, 400, 200);
mainPanel.add(scrollPane);
getContentPane().add(mainPanel);
actionListener = new MyActionListener();
}
public static void main(String[] args) {
TestImage testImage = new TestImage();
testImage.setDefaultCloseOperation(TestImage.EXIT_ON_CLOSE);
testImage.setSize(new Dimension(600, 300));
testImage.setLocationRelativeTo(null);
testImage.setVisible(true);
testImage.setExtendedState(MAXIMIZED_BOTH);
}
private void intializeingPanel() {
mainPanel = new JPanel(null);
mainPanel.setBounds(100, 10, 600, 300);
displayPanel = new DisplayPanel();
TitledBorder normalImageBorder = new TitledBorder("Normal image");
displayPanel.setBorder(normalImageBorder);
displayPanel.setBackground(Color.WHITE);
normalScrollPane = new JScrollPane(displayPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
normalScrollPane.setBounds(50, 150, 200, 300);
mainPanel.add(normalScrollPane);
stegoPanel = new DisplayPanel();
TitledBorder stegoImageBorder = new TitledBorder("Stego image");
stegoPanel.setBorder(stegoImageBorder);
stegoPanel.setBackground(Color.WHITE);
stegoScrollPane = new JScrollPane(stegoPanel,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
stegoScrollPane.setBounds(300, 150, 200, 300);
mainPanel.add(stegoScrollPane);
}
private void intializeingButtons() {
openButton = new JButton("Open");
openButton.setBounds(50, 10, 100, 50);
openButton.addActionListener(actionListener);
mainPanel.add(openButton);
////////////////////saveButton////////////////////////
saveButton = new JButton("Save as");
saveButton.setBounds(150, 10, 100, 50);
saveButton.addActionListener(actionListener);
mainPanel.add(saveButton);
////////////////////empedbitton///////////////////////
empededButton = new JButton("Hide message");
empededButton.setBounds(250, 10, 100, 50);
empededButton.addActionListener(actionListener);
mainPanel.add(empededButton);
////////////////////extractButton////////////////////
extractButton = new JButton("Extract message");
extractButton.setBounds(350, 10, 100, 50);
mainPanel.add(extractButton);
}
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
String str = area.getText();
BufferedImage image = null;
int[] imageData;
int[] img;
int offset = 0;
if (e.getSource() == openButton) {
int returnValue = fileChooser.showOpenDialog(TestImage.this);
if (returnValue == JFileChooser.APPROVE_OPTION) {
File openFile = fileChooser.getSelectedFile();
try {
displayPanel.setBufferedImage(ImageIO.read(openFile));
repaint();
} catch (Exception exception) {
exception.printStackTrace();
}
}
} //else if (e.getSource() == saveButton) {
// image = stegoPanel.getBufferedImage();
// imageData = getImageData(image);
// File saveFile=fileChooser.getSelectedFile();
// try {
// img = hideing_text(imageData, str.getBytes("US-ASCII"), offset);
// try {
// saveBufferedImage = toImage(image.getWidth(), image.getHeight(), img);
// } catch (IOException ex) {
// ex.printStackTrace();
// }
// } catch (UnsupportedEncodingException ex) {
// ex.printStackTrace();
// }
// int returnValue = fileChooser.showSaveDialog(TestImage.this);
// if (returnValue == JFileChooser.APPROVE_OPTION) {
// try {
// ImageIO.write(saveBufferedImage, str, saveFile);
// } catch (IOException ex) {
// ex.printStackTrace();
// }
// }
// }
else if (e.getSource() == empededButton) {
try {
System.out.println("is not null");
image = displayPanel.getBufferedImage();
imageData = getImageData(image);
img = hideing_text(imageData, str.getBytes("US-ASCII"), offset);
stegoPanel.setBufferedImage(toImage(image.getWidth(), image.getHeight(), img));
repaint();
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
JOptionPane.showMessageDialog(null, "The message is hide");
}
}
private int[] hideing_text(int[] image, byte[] text, int offset) {
try {
if (((text.length) * 8) + offset > image.length) {
throw new IOException();
} else {
for (int i = 0; i < text.length; ++i) {
int textbyte = text;
for (int bit = 7; bit >= 0; bit--, offset++) {
int b = (textbyte >> bit) & 1;
image[offset] = ((image[offset] & 0xFE) | b);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return image;
}
private int[] getImageData(BufferedImage image) {
int size = image.getWidth() * image.getHeight();
int[] buffer = new int[size];
image.getRGB(0, 0, image.getWidth(), image.getHeight(), buffer, 0, image.getWidth());
return buffer;
}
}
public BufferedImage toImage(int w, int h, int[] data) throws IOException {
BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
image.setRGB(0, 0, w, h, data, 0, w);
return image;
}
}ال class DisplayPanel
-----------------------------
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class DisplayPanel extends JPanel {
private BufferedImage bufferedImage;
private Dimension PanelDimension = new Dimension();
public void setBufferedImage(BufferedImage bufferedImage) {
this.bufferedImage = bufferedImage;
PanelDimension.setSize(bufferedImage.getWidth(), bufferedImage.getHeight());
setPreferredSize(PanelDimension);
revalidate();
}
public BufferedImage getBufferedImage() {
return bufferedImage;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (bufferedImage != null) {
g.drawImage(bufferedImage, 0, 0, this);
}
}
}شكراً ,,,,,
