#1068 MorphShape with focal gradient fix

ImageFormat correct extension
Logging exception on FLA export
FLA XML formatting fix
This commit is contained in:
Jindra Petřík
2015-10-27 23:47:30 +01:00
parent 4d6dda002e
commit 6a9d7aa0e6
5 changed files with 63 additions and 10 deletions

View File

@@ -22,5 +22,16 @@ package com.jpexs.decompiler.flash.tags.enums;
*/
public enum ImageFormat {
UNKNOWN, JPEG, GIF, PNG, BMP
UNKNOWN(""), JPEG(".jpg"), GIF(".gif"), PNG(".png"), BMP(".bmp");
private final String extension;
private ImageFormat(String extension) {
this.extension = extension;
}
public String getExtension() {
return extension;
}
}

View File

@@ -12,7 +12,8 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library.
* License along with this library.
*/
package com.jpexs.decompiler.flash.types;
import com.jpexs.decompiler.flash.types.annotations.SWFType;
@@ -31,9 +32,41 @@ public class MORPHFOCALGRADIENT extends MORPHGRADIENT implements Serializable {
@SWFType(BasicType.FIXED8)
public float endFocalPoint;
@Override
public GRADIENT getEndGradient() {
FOCALGRADIENT ret = new FOCALGRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {
ret.gradientRecords[m] = gradientRecords[m].getEndRecord();
}
ret.focalPoint = endFocalPoint;
return ret;
}
@Override
public GRADIENT getStartGradient() {
FOCALGRADIENT ret = new FOCALGRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {
ret.gradientRecords[m] = gradientRecords[m].getStartRecord();
}
ret.focalPoint = startFocalPoint;
return ret;
}
@Override
public GRADIENT getGradientAt(int ratio) {
FOCALGRADIENT ret = new FOCALGRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {

View File

@@ -61,6 +61,8 @@ public class MORPHGRADIENT implements Serializable {
public GRADIENT getGradientAt(int ratio) {
GRADIENT ret = new GRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {
@@ -74,6 +76,8 @@ public class MORPHGRADIENT implements Serializable {
public GRADIENT getStartGradient() {
GRADIENT ret = new GRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {
ret.gradientRecords[m] = gradientRecords[m].getStartRecord();
@@ -83,6 +87,8 @@ public class MORPHGRADIENT implements Serializable {
public GRADIENT getEndGradient() {
GRADIENT ret = new GRADIENT();
ret.spreadMode = spreadMode;
ret.interpolationMode = interPolationMode;
ret.gradientRecords = new GRADRECORD[gradientRecords.length];
for (int m = 0; m < gradientRecords.length; m++) {
ret.gradientRecords[m] = gradientRecords[m].getEndRecord();

View File

@@ -103,6 +103,7 @@ import com.jpexs.decompiler.flash.types.shaperecords.StyleChangeRecord;
import com.jpexs.decompiler.flash.types.sound.MP3FRAME;
import com.jpexs.decompiler.flash.types.sound.MP3SOUNDDATA;
import com.jpexs.decompiler.flash.types.sound.SoundFormat;
import com.jpexs.helpers.Helper;
import com.jpexs.helpers.Path;
import com.jpexs.helpers.SerializableImage;
import com.jpexs.helpers.utf8.Utf8Helper;
@@ -303,7 +304,7 @@ public class XFLConverter {
ImageTag it = (ImageTag) bitmapCh;
ret.append("<BitmapFill");
ret.append(" bitmapPath=\"");
ret.append("bitmap").append(bitmapCh.getCharacterId()).append(".").append(it.getImageFormat());
ret.append("bitmap").append(bitmapCh.getCharacterId()).append(it.getImageFormat().getExtension());
} else {
if (bitmapCh != null) {
logger.log(Level.SEVERE, "Suspicious bitmapfill:{0}", bitmapCh.getClass().getSimpleName());
@@ -609,15 +610,16 @@ public class XFLConverter {
}
}
}
if (currentLayer.length() > 0) {
currentLayer.append("</edges>");
currentLayer.append("</DOMShape>");
String currentLayerString = currentLayer.toString();
if (!currentLayerString.contains("<edges></edges>")) { //no empty layers, TODO:handle this better
layers.add(currentLayerString);
}
currentLayer.setLength(0);
}
String currentLayerString = currentLayer.toString();
if (!currentLayerString.contains("<edges></edges>")) { //no empty layers, TODO:handle this better
layers.add(currentLayerString);
}
currentLayer.setLength(0);
currentLayer.append("<DOMShape isFloating=\"true\">");
//ret += convertShape(characters, null, shape);
for (int f = 0; f < scr.fillStyles.fillStyles.length; f++) {
@@ -1342,7 +1344,7 @@ public class XFLConverter {
SerializableImage image = imageTag.getImage(false);
ImageFormat format = imageTag.getImageFormat();
ImageHelper.write(image.getBufferedImage(), format, baos);
String symbolFile = "bitmap" + symbol.getCharacterId() + "." + imageTag.getImageFormat();
String symbolFile = "bitmap" + symbol.getCharacterId() + imageTag.getImageFormat().getExtension();
files.put(symbolFile, baos.toByteArray());
String mediaLinkStr = "<DOMBitmapItem name=\"" + symbolFile + "\" sourceLastImported=\"" + getTimestamp(swf) + "\" externalFileSize=\"" + baos.toByteArray().length + "\"";
switch (format) {