//GEN-BEGIN:initComponents
+ private void initComponents() {
+
+ okButton = new javax.swing.JButton();
+ aboutPanel = new javax.swing.JPanel();
+ jScrollPane1 = new javax.swing.JScrollPane();
+ jEditorPane1 = new javax.swing.JEditorPane();
+
+ setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
+
+ okButton.setText("OK");
+ okButton.setAlignmentX(0.5F);
+ okButton.addActionListener(this::okButtonActionPerformed);
+
+ aboutPanel.setPreferredSize(new java.awt.Dimension(450, 300));
+
+ jEditorPane1.setContentType("text/html");
+ jEditorPane1.setEditable(false);
+ jEditorPane1.setText("\nStegsolve v1.4 by Caesum
Mod by Giotino\n
\nStegsolve is a stegano solver for challenges. It provides these main functions:\n\n- A quick view of different bit planes and some simple transformations.
\n- Data extraction from planes. This can be row order or column order, with bits treated as a bitstream and converted into bytes.
\n- Some simple checking of file formats and reporting on the filesize, additional bytes, file holes, etc. This is highly dependent upon the type of image.
\n- Stereogram solver - simply change the offset until the image becomes visible.
\n- Frame browser for animated images. This should also work for viewing layers in multi-layered PNG files.
\n- Image combiner to combine two images in a variety of ways and browse through the different combinations.
\n
\nCopy/Cut and paste is available from most text using CTRL-C to copy, CTRL-V to paste and CTRL-X for cut.\n
If an image fails to load, for example because it is corrupt, then file analysis will still open the file that you just tried to view. It may, however, crash out before reporting the information that you want to know. This will work though on images where the PNG has corrupted CRC values for example.\n\n");
+ jEditorPane1.setMinimumSize(new java.awt.Dimension(150, 150));
+ jEditorPane1.setPreferredSize(new java.awt.Dimension(150, 150));
+ jScrollPane1.setViewportView(jEditorPane1);
+
+ javax.swing.GroupLayout aboutPanelLayout = new javax.swing.GroupLayout(aboutPanel);
+ aboutPanel.setLayout(aboutPanelLayout);
+ aboutPanelLayout.setHorizontalGroup(
+ aboutPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
+ );
+ aboutPanelLayout.setVerticalGroup(
+ aboutPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE)
+ );
+
+ javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
+ getContentPane().setLayout(layout);
+ layout.setHorizontalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(layout.createSequentialGroup()
+ .addGap(168, 168, 168)
+ .addComponent(okButton)
+ .addContainerGap(227, Short.MAX_VALUE))
+ .addComponent(aboutPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 444, Short.MAX_VALUE)
+ );
+ layout.setVerticalGroup(
+ layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
+ .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
+ .addComponent(aboutPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 311, Short.MAX_VALUE)
+ .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
+ .addComponent(okButton)
+ .addContainerGap())
+ );
+
+ pack();
+ }//
//GEN-END:initComponents
+
+ /**
+ * Disposes of the form when the ok button is pressed
+ * @param evt Button event
+ */
+ private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
+ dispose();
+ }//GEN-LAST:event_okButtonActionPerformed
+
+ // Variables declaration - do not modify//GEN-BEGIN:variables
+ private javax.swing.JPanel aboutPanel;
+ private javax.swing.JEditorPane jEditorPane1;
+ private javax.swing.JScrollPane jScrollPane1;
+ private javax.swing.JButton okButton;
+ // End of variables declaration//GEN-END:variables
+
+}
diff --git a/stegsolve/CombineTransform.java b/stegsolve/CombineTransform.java
new file mode 100644
index 0000000..7afa83e
--- /dev/null
+++ b/stegsolve/CombineTransform.java
@@ -0,0 +1,232 @@
+/*
+ * CombineTransform.java
+ */
+
+package stegsolve;
+
+import java.awt.image.*;
+
+/**
+ * Represents combination of two images
+ * @author Caesum
+ */
+public class CombineTransform {
+
+ /**
+ * Original images
+ */
+ private BufferedImage im1, im2;
+ /**
+ * Transformed image
+ */
+ private BufferedImage transform;
+ /**
+ * Number of transformation
+ */
+ private int transNum;
+ private final int NUMTRANS = 13;
+
+ /**
+ * Create a new transformation
+ * @param bi Image 1
+ * @param bi2 Image 2
+ */
+ CombineTransform(BufferedImage bi, BufferedImage bi2)
+ {
+ im1 = bi;
+ im2 = bi2;
+ transNum=0;
+ calcTrans();
+ }
+
+ /**
+ * interlaces the images
+ */
+ private void calcInterlace()
+ {
+ int width = im1.getWidth();
+ if(im2.getWidth()