mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-07-06 20:19:16 +00:00
#299 Replacing DefineBits images
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user