DefineJPEG3 tag reading fix, Caching Shape outline, zoom to fit fixed, shape caching

This commit is contained in:
honfika@gmail.com
2014-11-06 23:33:42 +01:00
parent b51fdfb6a9
commit 660520f44b
8 changed files with 28 additions and 10 deletions

View File

@@ -768,10 +768,12 @@ public class SWFInputStream implements AutoCloseable {
endDumpLevel();
InflaterInputStream dis = new InflaterInputStream(new ByteArrayInputStream(data));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (count > 0) {
byte[] buf = new byte[4096];
int c = 0;
while ((c = dis.read(buf)) > 0) {
baos.write(buf, 0, c);
int c = 0;
while ((c = dis.read(buf)) > 0) {
baos.write(buf, 0, c);
}
}
return baos.toByteArray();
}

View File

@@ -41,6 +41,8 @@ public class SHAPE implements NeedsCharacters, Serializable {
public int numLineBits;
public List<SHAPERECORD> shapeRecords;
private Shape cachedOutline;
@Override
public void getNeededCharacters(Set<Integer> needed) {
for (SHAPERECORD r : shapeRecords) {
@@ -62,12 +64,17 @@ public class SHAPE implements NeedsCharacters, Serializable {
}
public Shape getOutline() {
if (cachedOutline != null) {
return cachedOutline;
}
List<GeneralPath> paths = PathExporter.export(this);
Area area = new Area();
for (GeneralPath path : paths) {
area.add(new Area(path));
}
cachedOutline = area;
return area;
}