#299 Replacing DefineBits images

This commit is contained in:
Honfika
2014-01-27 00:12:51 +01:00
parent 7fd28291c6
commit 20e929299c
4 changed files with 21 additions and 7 deletions

View File

@@ -2029,8 +2029,15 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
File selfile = Helper.fixDialogFile(fc.getSelectedFile());
byte[] data = Helper.readFile(selfile.getAbsolutePath());
try {
it.setImage(data);
it.getSwf().clearImageCache();
SWF swf = it.getSwf();
if (it instanceof DefineBitsTag) {
DefineBitsJPEG2Tag jpeg2Tag = new DefineBitsJPEG2Tag(swf, it.getOriginalData(), swf.version, it.getPos(), it.getCharacterId(), data);
swf.tags.set(swf.tags.indexOf(it), jpeg2Tag);
refreshTree();
} else {
it.setImage(data);
}
swf.clearImageCache();
} catch (IOException ex) {
Logger.getLogger(MainPanel.class.getName()).log(Level.SEVERE, "Invalid image", ex);
View.showMessageDialog(null, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE);

View File

@@ -70,6 +70,12 @@ public class DefineBitsJPEG2Tag extends ImageTag implements AloneTag {
imageData = sis.readBytesEx(sis.available());
}
public DefineBitsJPEG2Tag(SWF swf, byte[] data, int version, long pos, int characterID, byte[] imageData) throws IOException {
super(swf, ID, "DefineBitsJPEG2", data, pos);
this.characterID = characterID;
this.imageData = imageData;
}
@Override
public void setImage(byte[] data) {
imageData = data;

View File

@@ -44,10 +44,9 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag {
}
@Override
public void setImage(byte[] data) {
imageData = data;
public void setImage(byte[] data) throws IOException {
if (ImageTag.getImageFormat(data).equals("jpg")) {
BufferedImage image = getImage(new ArrayList<Tag>());
BufferedImage image = ImageIO.read(new ByteArrayInputStream(data));
byte[] ba = new byte[image.getWidth() * image.getHeight()];
for (int i = 0; i < ba.length; i++) {
ba[i] = (byte) 255;
@@ -56,6 +55,7 @@ public class DefineBitsJPEG3Tag extends ImageTag implements AloneTag {
} else {
bitmapAlphaData = new byte[0];
}
imageData = data;
}
@Override

View File

@@ -43,7 +43,8 @@ public class DefineBitsTag extends ImageTag {
@Override
public boolean importSupported() {
return false;
// importing a new image will replace the current DefineBitsTag with a new DefineBitsJPEG2Tag
return true;
}
public DefineBitsTag(SWF swf, byte[] data, int version, long pos) throws IOException {
@@ -74,7 +75,7 @@ public class DefineBitsTag extends ImageTag {
getJPEGTables(tags);
if ((jtt != null)) {
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
byte[] jttdata = jtt.getData(10);
byte[] jttdata = jtt.getData(swf.version);
if (jttdata.length != 0) {
baos.write(jttdata, SWF.hasErrorHeader(jttdata) ? 4 : 0, jttdata.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2));
baos.write(jpegData, SWF.hasErrorHeader(jpegData) ? 6 : 2, jpegData.length - (SWF.hasErrorHeader(jttdata) ? 6 : 2));