Revision: 6643
http://sourceforge.net/p/jump-pilot/code/6643
Author: michaudm
Date: 2020-11-25 10:32:59 +0000 (Wed, 25 Nov 2020)
Log Message:
-----------
Fix related to #515 + remove duplicate code which could cause OOME
Modified Paths:
--------------
core/trunk/src/org/openjump/core/rasterimage/RasterImageLayer.java
Modified: core/trunk/src/org/openjump/core/rasterimage/RasterImageLayer.java
===================================================================
--- core/trunk/src/org/openjump/core/rasterimage/RasterImageLayer.java
2020-11-23 15:57:54 UTC (rev 6642)
+++ core/trunk/src/org/openjump/core/rasterimage/RasterImageLayer.java
2020-11-25 10:32:59 UTC (rev 6643)
@@ -25,6 +25,7 @@
import javax.media.jai.JAI;
import com.vividsolutions.jump.workbench.model.Disposable;
+import org.apache.commons.imaging.Imaging;
import org.openjump.core.ccordsys.utils.SRSInfo;
import org.openjump.util.metaData.MetaDataMap;
import org.openjump.util.metaData.ObjectContainingMetaInformation;
@@ -129,6 +130,7 @@
//-- end
private Metadata metadata;
+ private int bitsPerPixel = -1;
private Stats stats;
@@ -275,7 +277,6 @@
pb.addSource(im);
pb.add(xScale);
pb.add(yScale);
- JAI.create("Scale", pb, null).getAsBufferedImage();
// @TODO Try to replace JAI by Graphics2D after migration to 2.0
//BufferedImage resizedImage =
// new BufferedImage((int)(im.getWidth()*xScale),
(int)(im.getHeight()*yScale), im.getType());
@@ -347,11 +348,21 @@
symbologyChanged = false;
this.setNeedToKeepImage(false);
+ if (bitsPerPixel == -1) {
+ bitsPerPixel = Imaging.getImageInfo(new
File(imageFileName)).getBitsPerPixel();
+ }
clearImageAndRaster(true);
- if (getAvailRAM()-getCommittedMemory() <
origImageWidth*origImageHeight*4 + getAvailRAM()*0.01) {
+ // Check that there is enough free memory for the image + 1%
of available memory + 10Mb
+ if (getAvailRAM()-getCommittedMemory() <
+ origImageWidth*origImageHeight*bitsPerPixel/8 +
getAvailRAM()*0.01 + 10*1024*1024) {
layerViewPanel.getContext().warnUser("Low Memory : image "
+
imageFileName + " will not be displayed");
+ System.out.println("" +
(getAvailRAM()-getCommittedMemory())/1024 + "kb < " +
+
(origImageWidth*origImageHeight*bitsPerPixel/8)/1024 + "kb " +
+ getAvailRAM()*0.01/1024 + "kb + 10240");
return null;
+ } else {
+ System.out.println("Reload image");
}
// Load the part of the image intersecting the viewport and
setting this.image
reLoadImage();
@@ -368,8 +379,8 @@
double scaledHeight = upperLeftCornerOfImage.getY() -
lowerRightCornerOfImage.getY();
// Apply symbology to this.image
- setImage(stretchImageValuesForDisplay());
imageToDraw = stretchImageValuesForDisplay();
+ setImage(imageToDraw);
//if(getCommittedMemory() + minRamToKeepFree < availRAM){
//setNeedToKeepImage(true); //so small images are not
reloaded every time
@@ -497,7 +508,7 @@
actualImageEnvelope =
imageAndMetadata.getMetadata().getActualEnvelope();
originalCellSize =
imageAndMetadata.getMetadata().getOriginalCellSize();
actualCellSize = imageAndMetadata.getMetadata().getActualCellSize();
-
+
if(image != null) {
setImage(image);
}
_______________________________________________
Jump-pilot-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel