This commit is contained in:
2025-04-18 14:36:46 +08:00
19 changed files with 637 additions and 1071 deletions

72
.gitignore vendored Normal file
View File

@@ -0,0 +1,72 @@
out/
.DS_Store
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and WebStorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

11
.idea/artifacts/StegSolve.xml generated Normal file
View File

@@ -0,0 +1,11 @@
<component name="ArtifactManager">
<artifact type="jar" name="StegSolve">
<output-path>$PROJECT_DIR$/out/artifacts/StegSolve</output-path>
<root id="archive" name="StegSolve.jar">
<element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/META-INF/MANIFEST.MF" />
</element>
<element id="module-output" name="stegsolve" />
</root>
</artifact>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

8
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectPlainTextFileTypeManager">
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="11" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>

8
.idea/modules.xml generated Normal file
View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/stegsolve.iml" filepath="$PROJECT_DIR$/stegsolve.iml" />
</modules>
</component>
</project>

127
.idea/uiDesigner.xml generated Normal file
View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
<component name="uidesigner-configuration">
<option name="DEFAULT_LAYOUT_MANAGER" value="FlowLayout" />
</component>
</project>

6
.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

View File

@@ -1,7 +1,3 @@
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.1
Created-By: 1.6.0_21-b07 (Sun Microsystems Inc.)
Main-Class: stegsolve.StegSolve
Class-Path:
X-COMMENT: Main-Class will be added automatically by build

11
README.md Normal file
View File

@@ -0,0 +1,11 @@
# StegSolve
A modifed version of stegsolve
## 1.4 changes
- Added zoom to image
- Added drag&drop zone for files
- Added "all" option to channel planes in "Data Extract"
- Added horizontal scrolling (Shift+Mousewheel)

View File

@@ -1,3 +1,9 @@
Version 1.4
- Added zoom to image
- Added drag&drop zone for files
- Added "all" option to channel planes in "Data Extract"
- Added horizontal scrolling (Shift+Mousewheel)
Version 1.3
1. Added a transform showing only the gray bits of an image.
2. CRC checks on PNGs now done, and correct CRC shown if wrong.

11
stegsolve.iml Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,99 +0,0 @@
<?xml version="1.1" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<Properties>
<Property name="defaultCloseOperation" type="int" value="2"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
</SyntheticProperties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
</AuxValues>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="-2" pref="168" max="-2" attributes="0"/>
<Component id="okButton" min="-2" max="-2" attributes="0"/>
<EmptySpace pref="227" max="32767" attributes="0"/>
</Group>
<Component id="aboutPanel" alignment="0" pref="444" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="1" attributes="0">
<Component id="aboutPanel" pref="311" max="32767" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
<Component id="okButton" min="-2" max="-2" attributes="0"/>
<EmptySpace max="-2" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JButton" name="okButton">
<Properties>
<Property name="text" type="java.lang.String" value="OK"/>
<Property name="alignmentX" type="float" value="0.5"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="okButtonActionPerformed"/>
</Events>
</Component>
<Container class="javax.swing.JPanel" name="aboutPanel">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[450, 300]"/>
</Property>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" alignment="0" pref="444" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" alignment="0" pref="311" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JEditorPane" name="jEditorPane1">
<Properties>
<Property name="contentType" type="java.lang.String" value="text/html"/>
<Property name="editable" type="boolean" value="false"/>
<Property name="text" type="java.lang.String" value="&lt;html&gt;&#xa;&lt;center&gt;&lt;b&gt;Stegsolve v1.3 by Caesum&lt;/b&gt;&lt;/center&gt;&#xa;&lt;br&gt;&#xa;Stegsolve is a stegano solver for challenges. It provides these main functions:&#xa;&lt;ul&gt;&#xa;&lt;li&gt;A quick view of different bit planes and some simple transformations.&lt;/li&gt;&#xa;&lt;li&gt;Data extraction from planes. This can be row order or column order, with bits treated as a bitstream and converted into bytes.&lt;/li&gt;&#xa;&lt;li&gt;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.&lt;/li&gt;&#xa;&lt;li&gt;Stereogram solver - simply change the offset until the image becomes visible.&lt;/li&gt;&#xa;&lt;li&gt;Frame browser for animated images. This should also work for viewing layers in multi-layered PNG files.&lt;/li&gt;&#xa;&lt;li&gt;Image combiner to combine two images in a variety of ways and browse through the different combinations.&lt;/li&gt;&#xa;&lt;/ul&gt;&#xa;&lt;p&gt;Copy/Cut and paste is available from most text using CTRL-C to copy, CTRL-V to paste and CTRL-X for cut.&#xa;&lt;p&gt;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.&#xa;&lt;/html&gt;&#xa;"/>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[150, 150]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[150, 150]"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@@ -37,17 +37,13 @@ public class AboutFrame extends javax.swing.JFrame {
okButton.setText("OK");
okButton.setAlignmentX(0.5F);
okButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
okButtonActionPerformed(evt);
}
});
okButton.addActionListener(this::okButtonActionPerformed);
aboutPanel.setPreferredSize(new java.awt.Dimension(450, 300));
jEditorPane1.setContentType("text/html");
jEditorPane1.setEditable(false);
jEditorPane1.setText("<html>\n<center><b>Stegsolve v1.3 by Caesum</b></center>\n<br>\nStegsolve is a stegano solver for challenges. It provides these main functions:\n<ul>\n<li>A quick view of different bit planes and some simple transformations.</li>\n<li>Data extraction from planes. This can be row order or column order, with bits treated as a bitstream and converted into bytes.</li>\n<li>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.</li>\n<li>Stereogram solver - simply change the offset until the image becomes visible.</li>\n<li>Frame browser for animated images. This should also work for viewing layers in multi-layered PNG files.</li>\n<li>Image combiner to combine two images in a variety of ways and browse through the different combinations.</li>\n</ul>\n<p>Copy/Cut and paste is available from most text using CTRL-C to copy, CTRL-V to paste and CTRL-X for cut.\n<p>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</html>\n");
jEditorPane1.setText("<html>\n<center><b>Stegsolve v1.4 by Caesum<br>Mod by Giotino</b></center>\n<br>\nStegsolve is a stegano solver for challenges. It provides these main functions:\n<ul>\n<li>A quick view of different bit planes and some simple transformations.</li>\n<li>Data extraction from planes. This can be row order or column order, with bits treated as a bitstream and converted into bytes.</li>\n<li>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.</li>\n<li>Stereogram solver - simply change the offset until the image becomes visible.</li>\n<li>Frame browser for animated images. This should also work for viewing layers in multi-layered PNG files.</li>\n<li>Image combiner to combine two images in a variety of ways and browse through the different combinations.</li>\n</ul>\n<p>Copy/Cut and paste is available from most text using CTRL-C to copy, CTRL-V to paste and CTRL-X for cut.\n<p>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</html>\n");
jEditorPane1.setMinimumSize(new java.awt.Dimension(150, 150));
jEditorPane1.setPreferredSize(new java.awt.Dimension(150, 150));
jScrollPane1.setViewportView(jEditorPane1);

View File

@@ -5,8 +5,13 @@
package stegsolve;
import javax.swing.*;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.dnd.*;
import java.awt.image.*;
import java.awt.*;
import java.io.File;
import java.util.TooManyListenersException;
/**
* A JPanel with an image attached to it
@@ -14,18 +19,25 @@ import java.awt.*;
*/
public class DPanel extends JPanel
{
private Dimension preferredSize = new Dimension(200, 200);
private Dimension defaultSize = new Dimension();
private Dimension currentSize = new Dimension();
private DropTarget dropTarget;
private DropTargetHandler dropTargetHandler;
private Point dragPoint;
private boolean dragOver = false;
public DPanel() {
//setBackground(Color.RED);
}
/**
* The image attached to this panel
*/
private BufferedImage bi = null;
/**
* Constructor
*/
DPanel()
{
}
/**
* Overridden paint method for the panel which
* paints the image on the panel
@@ -35,7 +47,7 @@ public class DPanel extends JPanel
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(bi!=null)
g.drawImage(bi, 0, 0, this);
g.drawImage(bi, 0, 0, currentSize.width, currentSize.height, this);
}
/**
@@ -46,8 +58,148 @@ public class DPanel extends JPanel
public void setImage(BufferedImage bix)
{
bi = bix;
defaultSize.width = bi.getWidth();
defaultSize.height = bi.getHeight();
setSize(bi.getWidth(), bi.getHeight());
repaint();
//apply(100);
}
@Override
public Dimension getPreferredSize() {
return preferredSize;
}
public void apply(int percent) {
currentSize.width = (int)(defaultSize.width * (((float)percent)/100));
currentSize.height = (int)(defaultSize.height * (((float)percent)/100));
preferredSize = currentSize;
revalidate();
repaint();
}
protected class DropTargetHandler implements DropTargetListener {
protected void processDrag(DropTargetDragEvent dtde) {
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrag(DnDConstants.ACTION_COPY);
} else {
dtde.rejectDrag();
}
}
@Override
public void dragEnter(DropTargetDragEvent dtde) {
processDrag(dtde);
SwingUtilities.invokeLater(new DragUpdate(true, dtde.getLocation()));
repaint();
}
@Override
public void dragOver(DropTargetDragEvent dtde) {
processDrag(dtde);
SwingUtilities.invokeLater(new DragUpdate(true, dtde.getLocation()));
repaint();
}
@Override
public void dropActionChanged(DropTargetDragEvent dtde) {
}
@Override
public void dragExit(DropTargetEvent dte) {
SwingUtilities.invokeLater(new DragUpdate(false, null));
repaint();
}
@Override
public void drop(DropTargetDropEvent dtde) {
SwingUtilities.invokeLater(new DragUpdate(false, null));
Transferable transferable = dtde.getTransferable();
if (dtde.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
dtde.acceptDrop(dtde.getDropAction());
try {
java.util.List transferData = (java.util.List) transferable.getTransferData(DataFlavor.javaFileListFlavor);
if (transferData.size() == 1) {
StegSolve.that.loadImage((File)transferData.get(0));
dtde.dropComplete(true);
}
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
dtde.rejectDrop();
}
}
}
protected DropTarget getMyDropTarget() {
if (dropTarget == null) {
dropTarget = new DropTarget(this, DnDConstants.ACTION_COPY_OR_MOVE, null);
}
return dropTarget;
}
protected DropTargetHandler getDropTargetHandler() {
if (dropTargetHandler == null) {
dropTargetHandler = new DropTargetHandler();
}
return dropTargetHandler;
}
@Override
public void addNotify() {
super.addNotify();
try {
getMyDropTarget().addDropTargetListener(getDropTargetHandler());
} catch (TooManyListenersException ex) {
ex.printStackTrace();
}
}
@Override
public void removeNotify() {
super.removeNotify();
getMyDropTarget().removeDropTargetListener(getDropTargetHandler());
}
/*
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (dragOver) {
Graphics2D g2d = (Graphics2D) g.create();
g2d.setColor(new Color(0, 255, 0, 64));
g2d.fill(new Rectangle(getWidth(), getHeight()));
if (dragPoint != null && target != null) {
int x = dragPoint.x - 12;
int y = dragPoint.y - 12;
g2d.drawImage(target, x, y, this);
}
g2d.dispose();
}
}
*/
public class DragUpdate implements Runnable {
private boolean dragOver;
private Point dragPoint;
public DragUpdate(boolean dragOver, Point dragPoint) {
this.dragOver = dragOver;
this.dragPoint = dragPoint;
}
@Override
public void run() {
DPanel.this.dragOver = dragOver;
DPanel.this.dragPoint = dragPoint;
DPanel.this.repaint();
}
}
}

View File

@@ -1,752 +0,0 @@
<?xml version="1.1" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<NonVisualComponents>
<Component class="javax.swing.ButtonGroup" name="byGroup">
</Component>
<Component class="javax.swing.ButtonGroup" name="bitGroup">
</Component>
<Component class="javax.swing.ButtonGroup" name="planeGroup">
</Component>
</NonVisualComponents>
<Properties>
<Property name="defaultCloseOperation" type="int" value="2"/>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[720, 560]"/>
</Property>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
</SyntheticProperties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-31,0,0,3,32"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout">
<Property name="horizontalGap" type="int" value="5"/>
<Property name="verticalGap" type="int" value="5"/>
</Layout>
<SubComponents>
<Container class="javax.swing.JPanel" name="optionsPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[720, 280]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[720, 280]"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="saveText"/>
</AccessibilityProperties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="lhSettingsPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 280]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 280]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="bitPlanesPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Bit Planes"/>
</Border>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 200]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 200]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="alphaBitPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[100, 33]"/>
</Property>
<Property name="name" type="java.lang.String" value="alphaBitPanel" noResource="true"/>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[350, 34]"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="alphaBitPanel"/>
</AccessibilityProperties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="alphaLabel">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Alpha"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab7">
<Properties>
<Property name="text" type="java.lang.String" value="7"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab6">
<Properties>
<Property name="text" type="java.lang.String" value="6"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab5">
<Properties>
<Property name="text" type="java.lang.String" value="5"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab4">
<Properties>
<Property name="text" type="java.lang.String" value="4"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab3">
<Properties>
<Property name="text" type="java.lang.String" value="3"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab2">
<Properties>
<Property name="text" type="java.lang.String" value="2"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab1">
<Properties>
<Property name="text" type="java.lang.String" value="1"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="ab0">
<Properties>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="redBitPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[100, 33]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[350, 34]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="redLabel">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Red"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb7">
<Properties>
<Property name="text" type="java.lang.String" value="7"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb6">
<Properties>
<Property name="text" type="java.lang.String" value="6"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb5">
<Properties>
<Property name="text" type="java.lang.String" value="5"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb4">
<Properties>
<Property name="text" type="java.lang.String" value="4"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb3">
<Properties>
<Property name="text" type="java.lang.String" value="3"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb2">
<Properties>
<Property name="text" type="java.lang.String" value="2"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb1">
<Properties>
<Property name="text" type="java.lang.String" value="1"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="rb0">
<Properties>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="greenBitPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[100, 33]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[350, 34]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="greenLabel">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Green"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb7">
<Properties>
<Property name="text" type="java.lang.String" value="7"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb6">
<Properties>
<Property name="text" type="java.lang.String" value="6"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb5">
<Properties>
<Property name="text" type="java.lang.String" value="5"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb4">
<Properties>
<Property name="text" type="java.lang.String" value="4"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb3">
<Properties>
<Property name="text" type="java.lang.String" value="3"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb2">
<Properties>
<Property name="text" type="java.lang.String" value="2"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb1">
<Properties>
<Property name="text" type="java.lang.String" value="1"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="gb0">
<Properties>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="blueBitPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[100, 33]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[350, 34]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="blueLabel">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Blue"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[40, 14]"/>
</Property>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb7">
<Properties>
<Property name="text" type="java.lang.String" value="7"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb6">
<Properties>
<Property name="text" type="java.lang.String" value="6"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb5">
<Properties>
<Property name="text" type="java.lang.String" value="5"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb4">
<Properties>
<Property name="text" type="java.lang.String" value="4"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb3">
<Properties>
<Property name="text" type="java.lang.String" value="3"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb2">
<Properties>
<Property name="text" type="java.lang.String" value="2"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb1">
<Properties>
<Property name="text" type="java.lang.String" value="1"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="bb0">
<Properties>
<Property name="text" type="java.lang.String" value="0"/>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="prevSettingsPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Preview Settings"/>
</Border>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 50]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[360, 50]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout">
<Property name="verticalGap" type="int" value="0"/>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="hdLabel">
<Properties>
<Property name="text" type="java.lang.String" value="Include Hex Dump In Preview"/>
</Properties>
</Component>
<Component class="javax.swing.JCheckBox" name="hdInclude">
<Properties>
<Property name="selected" type="boolean" value="true"/>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="rhSettingsPanel">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 280]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 280]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="East"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout">
<Property name="horizontalGap" type="int" value="0"/>
</Layout>
<SubComponents>
<Container class="javax.swing.JPanel" name="orderSettingsPanel">
<Properties>
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
<Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo">
<TitledBorder title="Order settings"/>
</Border>
</Property>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 260]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[300, 260]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout">
<Property name="alignment" type="int" value="0"/>
</Layout>
<SubComponents>
<Container class="javax.swing.JPanel" name="extractByPanel">
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="extractByLabel">
<Properties>
<Property name="text" type="java.lang.String" value="Extract By"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="byRowButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="byGroup"/>
</Property>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="Row"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="byColumnButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="byGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="Column"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="bitOrderPanel">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[240, 41]"/>
</Property>
</Properties>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout">
<Property name="alignment" type="int" value="0"/>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="bitOrderLabel">
<Properties>
<Property name="text" type="java.lang.String" value="Bit Order"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="MSBButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="bitGroup"/>
</Property>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="MSB First"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="LSBButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="bitGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="LSB First"/>
</Properties>
</Component>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="bitPlaneOrderPanel">
<Properties>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[200, 120]"/>
</Property>
</Properties>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Component id="bitPlaneOrderLabel" alignment="0" min="-2" max="-2" attributes="0"/>
<Group type="102" alignment="0" attributes="0">
<EmptySpace min="10" pref="10" max="10" attributes="0"/>
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<Component id="RBGButton" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="BRGButton" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="RGBButton" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="GRBButton" min="-2" max="-2" attributes="0"/>
</Group>
<Group type="102" alignment="0" attributes="0">
<Component id="GBRButton" min="-2" max="-2" attributes="0"/>
<EmptySpace type="separate" max="-2" attributes="0"/>
<Component id="BGRButton" min="-2" max="-2" attributes="0"/>
</Group>
</Group>
</Group>
</Group>
<EmptySpace pref="72" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Group type="102" alignment="0" attributes="0">
<EmptySpace max="-2" attributes="0"/>
<Component id="bitPlaneOrderLabel" min="-2" max="-2" attributes="0"/>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="RGBButton" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="GRBButton" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="RBGButton" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="BRGButton" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace type="unrelated" max="-2" attributes="0"/>
<Group type="103" groupAlignment="3" attributes="0">
<Component id="GBRButton" alignment="3" min="-2" max="-2" attributes="0"/>
<Component id="BGRButton" alignment="3" min="-2" max="-2" attributes="0"/>
</Group>
<EmptySpace pref="13" max="32767" attributes="0"/>
</Group>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Component class="javax.swing.JLabel" name="bitPlaneOrderLabel">
<Properties>
<Property name="text" type="java.lang.String" value="Bit Plane Order"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="RGBButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="RGB"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="RBGButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="RBG"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="GBRButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="GBR"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="GRBButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="GRB"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="BRGButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="BRG"/>
</Properties>
</Component>
<Component class="javax.swing.JRadioButton" name="BGRButton">
<Properties>
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
<ComponentRef name="planeGroup"/>
</Property>
<Property name="text" type="java.lang.String" value="BGR"/>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="exPreviewPanel">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="North"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Component class="javax.swing.JLabel" name="exPreviewLabel">
<Properties>
<Property name="horizontalAlignment" type="int" value="0"/>
<Property name="text" type="java.lang.String" value="Extract Preview"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[20, 14]"/>
</Property>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="previewLabel"/>
</AccessibilityProperties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
</Component>
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Last"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JTextArea" name="jPreview">
<Properties>
<Property name="columns" type="int" value="20"/>
<Property name="editable" type="boolean" value="false"/>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Courier New" size="14" style="0"/>
</Property>
<Property name="rows" type="int" value="10"/>
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
<Insets value="[5, 5, 5, 5]"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="buttonsPanel">
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="South"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JButton" name="previewButton">
<Properties>
<Property name="text" type="java.lang.String" value="Preview"/>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="previewButton"/>
</AccessibilityProperties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="previewButtonActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="saveTextButton">
<Properties>
<Property name="text" type="java.lang.String" value="Save Text"/>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="saveTextButton"/>
</AccessibilityProperties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveTextButtonActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="saveBinButton">
<Properties>
<Property name="text" type="java.lang.String" value="Save Bin"/>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="saveBinButton"/>
</AccessibilityProperties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="saveBinButtonActionPerformed"/>
</Events>
</Component>
<Component class="javax.swing.JButton" name="cancelButton">
<Properties>
<Property name="text" type="java.lang.String" value="Cancel"/>
</Properties>
<AccessibilityProperties>
<Property name="AccessibleContext.accessibleName" type="java.lang.String" value="cancelButton"/>
</AccessibilityProperties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="cancelButtonActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@@ -6,6 +6,8 @@
package stegsolve;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.image.*;
import javax.swing.*;
import java.io.*;
@@ -402,6 +404,7 @@ public class Extract extends javax.swing.JFrame {
bitPlanesPanel = new javax.swing.JPanel();
alphaBitPanel = new javax.swing.JPanel();
alphaLabel = new javax.swing.JLabel();
aba = new javax.swing.JCheckBox();
ab7 = new javax.swing.JCheckBox();
ab6 = new javax.swing.JCheckBox();
ab5 = new javax.swing.JCheckBox();
@@ -412,6 +415,7 @@ public class Extract extends javax.swing.JFrame {
ab0 = new javax.swing.JCheckBox();
redBitPanel = new javax.swing.JPanel();
redLabel = new javax.swing.JLabel();
rba = new javax.swing.JCheckBox();
rb7 = new javax.swing.JCheckBox();
rb6 = new javax.swing.JCheckBox();
rb5 = new javax.swing.JCheckBox();
@@ -422,6 +426,7 @@ public class Extract extends javax.swing.JFrame {
rb0 = new javax.swing.JCheckBox();
greenBitPanel = new javax.swing.JPanel();
greenLabel = new javax.swing.JLabel();
gba = new javax.swing.JCheckBox();
gb7 = new javax.swing.JCheckBox();
gb6 = new javax.swing.JCheckBox();
gb5 = new javax.swing.JCheckBox();
@@ -432,6 +437,7 @@ public class Extract extends javax.swing.JFrame {
gb0 = new javax.swing.JCheckBox();
blueBitPanel = new javax.swing.JPanel();
blueLabel = new javax.swing.JLabel();
bba = new javax.swing.JCheckBox();
bb7 = new javax.swing.JCheckBox();
bb6 = new javax.swing.JCheckBox();
bb5 = new javax.swing.JCheckBox();
@@ -472,7 +478,7 @@ public class Extract extends javax.swing.JFrame {
cancelButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setMinimumSize(new java.awt.Dimension(720, 560));
setMinimumSize(new java.awt.Dimension(790, 560));
getContentPane().setLayout(new java.awt.BorderLayout(5, 5));
optionsPanel.setMinimumSize(new java.awt.Dimension(720, 280));
@@ -482,13 +488,14 @@ public class Extract extends javax.swing.JFrame {
lhSettingsPanel.setMinimumSize(new java.awt.Dimension(360, 280));
lhSettingsPanel.setPreferredSize(new java.awt.Dimension(360, 280));
bitPlanesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Bit Planes"));
bitPlanesPanel.setMinimumSize(new java.awt.Dimension(360, 200));
bitPlanesPanel.setPreferredSize(new java.awt.Dimension(360, 200));
int bitPlanesWidth = 480;
bitPlanesPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Bit Planes"));
bitPlanesPanel.setMinimumSize(new java.awt.Dimension(bitPlanesWidth, 200));
bitPlanesPanel.setPreferredSize(new java.awt.Dimension(bitPlanesWidth, 200));
alphaBitPanel.setMinimumSize(new java.awt.Dimension(100, 33));
alphaBitPanel.setName("alphaBitPanel"); // NOI18N
alphaBitPanel.setPreferredSize(new java.awt.Dimension(350, 34));
alphaBitPanel.setPreferredSize(new java.awt.Dimension(bitPlanesWidth-10, 34));
alphaLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
alphaLabel.setText("Alpha");
@@ -498,6 +505,11 @@ public class Extract extends javax.swing.JFrame {
alphaLabel.setPreferredSize(new java.awt.Dimension(40, 14));
alphaBitPanel.add(alphaLabel);
aba.setText("all");
alphaBitPanel.add(aba);
checkAllListener(aba, ab7, ab6, ab5, ab4, ab3, ab2, ab1, ab0);
ab7.setText("7");
alphaBitPanel.add(ab7);
@@ -525,8 +537,7 @@ public class Extract extends javax.swing.JFrame {
bitPlanesPanel.add(alphaBitPanel);
alphaBitPanel.getAccessibleContext().setAccessibleName("alphaBitPanel");
redBitPanel.setMinimumSize(new java.awt.Dimension(100, 33));
redBitPanel.setPreferredSize(new java.awt.Dimension(350, 34));
redBitPanel.setPreferredSize(new java.awt.Dimension(bitPlanesWidth-10, 34));
redLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
redLabel.setText("Red");
@@ -536,6 +547,11 @@ public class Extract extends javax.swing.JFrame {
redLabel.setPreferredSize(new java.awt.Dimension(40, 14));
redBitPanel.add(redLabel);
rba.setText("all");
redBitPanel.add(rba);
checkAllListener(rba, rb7, rb6, rb5, rb4, rb3, rb2, rb1, rb0);
rb7.setText("7");
redBitPanel.add(rb7);
@@ -562,8 +578,7 @@ public class Extract extends javax.swing.JFrame {
bitPlanesPanel.add(redBitPanel);
greenBitPanel.setMinimumSize(new java.awt.Dimension(100, 33));
greenBitPanel.setPreferredSize(new java.awt.Dimension(350, 34));
greenBitPanel.setPreferredSize(new java.awt.Dimension(bitPlanesWidth-10, 34));
greenLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
greenLabel.setText("Green");
@@ -573,6 +588,11 @@ public class Extract extends javax.swing.JFrame {
greenLabel.setPreferredSize(new java.awt.Dimension(40, 14));
greenBitPanel.add(greenLabel);
gba.setText("all");
greenBitPanel.add(gba);
checkAllListener(gba, gb7, gb6, gb5, gb4, gb3, gb2, gb1, gb0);
gb7.setText("7");
greenBitPanel.add(gb7);
@@ -599,8 +619,7 @@ public class Extract extends javax.swing.JFrame {
bitPlanesPanel.add(greenBitPanel);
blueBitPanel.setMinimumSize(new java.awt.Dimension(100, 33));
blueBitPanel.setPreferredSize(new java.awt.Dimension(350, 34));
blueBitPanel.setPreferredSize(new java.awt.Dimension(bitPlanesWidth-10, 34));
blueLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
blueLabel.setText("Blue");
@@ -610,6 +629,11 @@ public class Extract extends javax.swing.JFrame {
blueLabel.setPreferredSize(new java.awt.Dimension(40, 14));
blueBitPanel.add(blueLabel);
bba.setText("all");
blueBitPanel.add(bba);
checkAllListener(bba, bb7, bb6, bb5, bb4, bb3, bb2, bb1, bb0);
bb7.setText("7");
blueBitPanel.add(bb7);
@@ -658,8 +682,7 @@ public class Extract extends javax.swing.JFrame {
rhSettingsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 5));
orderSettingsPanel.setBorder(javax.swing.BorderFactory.createTitledBorder("Order settings"));
orderSettingsPanel.setMinimumSize(new java.awt.Dimension(300, 260));
orderSettingsPanel.setPreferredSize(new java.awt.Dimension(300, 260));
orderSettingsPanel.setPreferredSize(new java.awt.Dimension(280, 260));
orderSettingsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
extractByLabel.setText("Extract By");
@@ -676,7 +699,7 @@ public class Extract extends javax.swing.JFrame {
orderSettingsPanel.add(extractByPanel);
bitOrderPanel.setPreferredSize(new java.awt.Dimension(240, 41));
bitOrderPanel.setPreferredSize(new java.awt.Dimension(250, 41));
bitOrderPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));
bitOrderLabel.setText("Bit Order");
@@ -693,7 +716,7 @@ public class Extract extends javax.swing.JFrame {
orderSettingsPanel.add(bitOrderPanel);
bitPlaneOrderPanel.setPreferredSize(new java.awt.Dimension(200, 120));
bitPlaneOrderPanel.setPreferredSize(new java.awt.Dimension(250, 130));
bitPlaneOrderLabel.setText("Bit Plane Order");
@@ -831,6 +854,19 @@ public class Extract extends javax.swing.JFrame {
pack();
}// </editor-fold>//GEN-END:initComponents
private void checkAllListener(JCheckBox ca, JCheckBox c7, JCheckBox c6, JCheckBox c5, JCheckBox c4, JCheckBox c3, JCheckBox c2, JCheckBox c1, JCheckBox c0) {
ca.addItemListener(e -> {
c7.setSelected(ca.isSelected());
c6.setSelected(ca.isSelected());
c5.setSelected(ca.isSelected());
c4.setSelected(ca.isSelected());
c3.setSelected(ca.isSelected());
c2.setSelected(ca.isSelected());
c1.setSelected(ca.isSelected());
c0.setSelected(ca.isSelected());
});
}
/**
* Generate the extract and generate the preview
* @param evt Event
@@ -885,6 +921,7 @@ public class Extract extends javax.swing.JFrame {
private javax.swing.JCheckBox ab5;
private javax.swing.JCheckBox ab6;
private javax.swing.JCheckBox ab7;
private javax.swing.JCheckBox aba;
private javax.swing.JPanel alphaBitPanel;
private javax.swing.JLabel alphaLabel;
private javax.swing.JCheckBox bb0;
@@ -895,6 +932,7 @@ public class Extract extends javax.swing.JFrame {
private javax.swing.JCheckBox bb5;
private javax.swing.JCheckBox bb6;
private javax.swing.JCheckBox bb7;
private javax.swing.JCheckBox bba;
private javax.swing.ButtonGroup bitGroup;
private javax.swing.JLabel bitOrderLabel;
private javax.swing.JPanel bitOrderPanel;
@@ -920,6 +958,7 @@ public class Extract extends javax.swing.JFrame {
private javax.swing.JCheckBox gb5;
private javax.swing.JCheckBox gb6;
private javax.swing.JCheckBox gb7;
private javax.swing.JCheckBox gba;
private javax.swing.JPanel greenBitPanel;
private javax.swing.JLabel greenLabel;
private javax.swing.JCheckBox hdInclude;
@@ -940,6 +979,7 @@ public class Extract extends javax.swing.JFrame {
private javax.swing.JCheckBox rb5;
private javax.swing.JCheckBox rb6;
private javax.swing.JCheckBox rb7;
private javax.swing.JCheckBox rba;
private javax.swing.JPanel redBitPanel;
private javax.swing.JLabel redLabel;
private javax.swing.JPanel rhSettingsPanel;

View File

@@ -1,110 +0,0 @@
<?xml version="1.1" encoding="UTF-8" ?>
<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo">
<Properties>
<Property name="defaultCloseOperation" type="int" value="2"/>
<Property name="title" type="java.lang.String" value="File Format Analysis"/>
</Properties>
<SyntheticProperties>
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
</SyntheticProperties>
<AuxValues>
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
<AuxValue name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,79,0,0,3,47"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/>
<SubComponents>
<Container class="javax.swing.JPanel" name="jPanel1">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 300]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 350]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="Center"/>
</Constraint>
</Constraints>
<Layout>
<DimensionLayout dim="0">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" alignment="0" pref="815" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
<DimensionLayout dim="1">
<Group type="103" groupAlignment="0" attributes="0">
<Component id="jScrollPane1" alignment="0" pref="300" max="32767" attributes="0"/>
</Group>
</DimensionLayout>
</Layout>
<SubComponents>
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 260]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 260]"/>
</Property>
</Properties>
<AuxValues>
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
</AuxValues>
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
<SubComponents>
<Component class="javax.swing.JEditorPane" name="report">
<Properties>
<Property name="contentType" type="java.lang.String" value="text/html"/>
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
<Font name="Courier New" size="14" style="0"/>
</Property>
</Properties>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Container>
<Container class="javax.swing.JPanel" name="jPanel2">
<Properties>
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 35]"/>
</Property>
<Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
<Dimension value="[400, 35]"/>
</Property>
</Properties>
<Constraints>
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout" value="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout$BorderConstraintsDescription">
<BorderConstraints direction="South"/>
</Constraint>
</Constraints>
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignFlowLayout"/>
<SubComponents>
<Component class="javax.swing.JButton" name="OKButton">
<Properties>
<Property name="text" type="java.lang.String" value="OK"/>
<Property name="horizontalTextPosition" type="int" value="0"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="OKButtonActionPerformed"/>
</Events>
</Component>
</SubComponents>
</Container>
</SubComponents>
</Form>

View File

@@ -7,6 +7,9 @@
package stegsolve;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.*;
import java.io.*;
import java.awt.image.*;
@@ -23,6 +26,7 @@ import java.awt.*;
*/
public class StegSolve extends JFrame
{
static StegSolve that;
/**
* Menu option - about
*/
@@ -83,6 +87,7 @@ public class StegSolve extends JFrame
* panel for buttons
*/
private JPanel buttonPanel;
private ZoomSlider zoomSlider;
/**
* Next frame button
*/
@@ -114,8 +119,9 @@ public class StegSolve extends JFrame
private Transform transform = null;
/** Creates new form stegsolve */
public StegSolve()
private StegSolve()
{
that = this;
initComponents();
}
@@ -143,29 +149,17 @@ public class StegSolve extends JFrame
fileOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, 0));
fileOpen.setText("Open");
fileOpen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
fileOpenActionPerformed(evt);
}
});
fileOpen.addActionListener(this::fileOpenActionPerformed);
menuFile.add(fileOpen);
fileSave.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, 0));
fileSave.setText("Save As");
fileSave.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
fileSaveActionPerformed(evt);
}
});
fileSave.addActionListener(this::fileSaveActionPerformed);
menuFile.add(fileSave);
fileExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, 0));
fileExit.setText("Exit");
fileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
fileExitActionPerformed(evt);
}
});
fileExit.addActionListener(this::fileExitActionPerformed);
menuFile.add(fileExit);
menuBar.add(menuFile);
@@ -173,43 +167,23 @@ public class StegSolve extends JFrame
menuAnalyse.setText("Analyse");
analyseFormat.setText("File Format");
analyseFormat.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
analyseFormatActionPerformed(evt);
}
});
analyseFormat.addActionListener(this::analyseFormatActionPerformed);
menuAnalyse.add(analyseFormat);
analyseExtract.setText("Data Extract");
analyseExtract.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
analyseExtractActionPerformed(evt);
}
});
analyseExtract.addActionListener(this::analyseExtractActionPerformed);
menuAnalyse.add(analyseExtract);
stereoSolve.setText("Stereogram Solver");
stereoSolve.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
stereoSolveActionPerformed(evt);
}
});
stereoSolve.addActionListener(this::stereoSolveActionPerformed);
menuAnalyse.add(stereoSolve);
frameBrowse.setText("Frame Browser");
frameBrowse.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
frameBrowseActionPerformed(evt);
}
});
frameBrowse.addActionListener(this::frameBrowseActionPerformed);
menuAnalyse.add(frameBrowse);
imageCombine.setText("Image Combiner");
imageCombine.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
imageCombineActionPerformed(evt);
}
});
imageCombine.addActionListener(this::imageCombineActionPerformed);
menuAnalyse.add(imageCombine);
menuBar.add(menuAnalyse);
@@ -217,11 +191,7 @@ public class StegSolve extends JFrame
menuHelp.setText("Help");
about.setText("About");
about.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
aboutActionPerformed(evt);
}
});
about.addActionListener(this::aboutActionPerformed);
menuHelp.add(about);
menuBar.add(menuHelp);
@@ -230,28 +200,60 @@ public class StegSolve extends JFrame
setLayout(new BorderLayout());
this.add(nowShowing, BorderLayout.NORTH);
JPanel textZoom = new JPanel();
textZoom.setLayout(new BorderLayout());
textZoom.add(nowShowing, BorderLayout.NORTH);
buttonPanel = new JPanel();
backwardButton = new JButton("<");
backwardButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
backwardButtonActionPerformed(evt);
}
});
backwardButton.addActionListener(this::backwardButtonActionPerformed);
forwardButton = new JButton(">");
forwardButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
forwardButtonActionPerformed(evt);
}
});
forwardButton.addActionListener(this::forwardButtonActionPerformed);
buttonPanel.add(backwardButton);
buttonPanel.add(forwardButton);
add(buttonPanel, BorderLayout.SOUTH);
zoomSlider = new ZoomSlider(10, 1000, 100);
zoomSlider.addChangeListener(v -> {
dp.apply(v);
dp.revalidate();
});
textZoom.add(zoomSlider, BorderLayout.SOUTH);
add(textZoom, BorderLayout.NORTH);
dp = new DPanel();
scrollPane = new JScrollPane(dp);
//Horizontal scrolling
JFrame frame = this;
frame.addKeyListener(new KeyListener() {
@Override
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if(e.isShiftDown()) {
frame.addMouseWheelListener(arg01 -> {
// TODO Auto-generated method stub
scrollPane.getHorizontalScrollBar().setValue(scrollPane.getHorizontalScrollBar().getValue()+ arg01.getWheelRotation());
});
}
}
@Override
public void keyReleased(KeyEvent e) {
if(!e.isShiftDown()) {
frame.removeMouseWheelListener(frame.getMouseWheelListeners()[0]);
}
}
@Override
public void keyTyped(KeyEvent e) {}
});
add(scrollPane, BorderLayout.CENTER);
backwardButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT,0), "back");
@@ -259,9 +261,12 @@ public class StegSolve extends JFrame
forwardButton.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT,0), "forward");
forwardButton.getActionMap().put("forward", forwardButtonPress);
this.setTitle("StegSolve 1.3 by Caesum");
this.setTitle("StegSolve 1.4 by Caesum (Mod by Giotino)");
this.setMaximumSize(getToolkit().getScreenSize());
pack();
this.setSize(500, 600);
//setResizable(false);
}// </editor-fold>
@@ -420,16 +425,27 @@ public class StegSolve extends JFrame
if(rVal == JFileChooser.APPROVE_OPTION)
{
sfile = fileChooser.getSelectedFile();
try
{
bi = ImageIO.read(sfile);
transform = new Transform(bi);
newImage();
}
catch (Exception e)
{
JOptionPane.showMessageDialog(this, "Failed to load file: " +e.toString());
}
loadImage(sfile);
}
}
public void loadImage(String path) {
File sfile = new File(path);
loadImage(sfile);
}
void loadImage(File sfile) {
this.sfile = sfile;
try
{
bi = ImageIO.read(sfile);
transform = new Transform(bi);
newImage();
}
catch (Exception e)
{
e.printStackTrace();
JOptionPane.showMessageDialog(this, "Failed to load file: " +e.toString());
}
}
@@ -440,10 +456,11 @@ public class StegSolve extends JFrame
{
nowShowing.setText(transform.getText());
dp.setImage(transform.getImage());
dp.setSize(transform.getImage().getWidth(),transform.getImage().getHeight());
dp.setSize(transform.getImage().getWidth(), transform.getImage().getHeight());
dp.setPreferredSize(new Dimension(transform.getImage().getWidth(),transform.getImage().getHeight()));
this.setMaximumSize(getToolkit().getScreenSize());
pack();
zoomSlider.setValue(100);
dp.apply(100);
scrollPane.revalidate();
repaint();
}
@@ -462,11 +479,6 @@ public class StegSolve extends JFrame
* @param args the command line arguments
*/
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
new StegSolve().setVisible(true);
}
});
EventQueue.invokeLater(() -> new StegSolve().setVisible(true));
}
}

66
stegsolve/ZoomSlider.java Normal file
View File

@@ -0,0 +1,66 @@
package stegsolve;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;
public class ZoomSlider extends JPanel {
private JSlider slider;
private JTextField textBox;
private int value;
public int getValue () { return value; }
void setValue(int value) {
slider.setValue(value);
textBox.setText(String.valueOf(value));
this.value = value;
for (SliderChangeListener scl : changeListeners)
scl.change(value);
}
private List<SliderChangeListener> changeListeners = new ArrayList<>();
ZoomSlider(int min, int max, int defaultValue) {
JLabel tip = new JLabel("Zoom:");
add(tip);
slider = new JSlider(min, max, defaultValue);
slider.addChangeListener(e -> {
setValue(slider.getValue());
});
add(slider);
textBox = new JTextField(String.valueOf(defaultValue), 5);
textBox.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
setValue(Integer.parseInt(textBox.getText()));
}
}
});
slider.setMaximumSize(new Dimension(500, 25));
add(textBox);
value = defaultValue;
}
void addChangeListener(SliderChangeListener listener) {
changeListeners.add(listener);
}
}
interface SliderChangeListener {
void change(int v);
}