diff --git a/vtm-desktop/src/org/oscim/awt/AwtBitmap.java b/vtm-desktop/src/org/oscim/awt/AwtBitmap.java index 807c7b63..1a2554a2 100644 --- a/vtm-desktop/src/org/oscim/awt/AwtBitmap.java +++ b/vtm-desktop/src/org/oscim/awt/AwtBitmap.java @@ -1,6 +1,6 @@ /* * Copyright 2013 Hannes Janetzek - * Copyright 2016 devemux86 + * Copyright 2016-2017 devemux86 * Copyright 2016-2017 Longri * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). @@ -47,7 +47,7 @@ public class AwtBitmap implements Bitmap { boolean internal; public AwtBitmap(int width, int height, int format) { - bitmap = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB_PRE); + bitmap = new BufferedImage(width, height, format != 0 ? format : BufferedImage.TYPE_INT_ARGB); this.width = width; this.height = height; diff --git a/vtm-desktop/src/org/oscim/awt/AwtCanvas.java b/vtm-desktop/src/org/oscim/awt/AwtCanvas.java index aca49ad3..7b50faaa 100644 --- a/vtm-desktop/src/org/oscim/awt/AwtCanvas.java +++ b/vtm-desktop/src/org/oscim/awt/AwtCanvas.java @@ -129,17 +129,21 @@ public class AwtCanvas implements Canvas { @Override public void drawBitmap(Bitmap bitmap, float x, float y) { - int intX = (int) x; - int intY = (int) y; BufferedImage src = ((AwtBitmap) bitmap).bitmap; - int[] srcbuf = ((DataBufferInt) src.getRaster().getDataBuffer()).getData(); - int[] dstbuf = ((DataBufferInt) this.bitmap.getRaster().getDataBuffer()).getData(); - int width = intX + src.getWidth() > this.bitmap.getWidth() ? this.getWidth() - intX : src.getWidth(); - int height = intY + src.getHeight() > this.bitmap.getHeight() ? this.getHeight() - intY : src.getHeight(); - int dstoffs = intX + intY * this.bitmap.getWidth(); - int srcoffs = 0; - for (int i = 0; i < height; i++, dstoffs += this.bitmap.getWidth(), srcoffs += width) - System.arraycopy(srcbuf, srcoffs, dstbuf, dstoffs, width); + // TODO Need better check + if (src.isAlphaPremultiplied()) { + int intX = (int) x; + int intY = (int) y; + int[] srcbuf = ((DataBufferInt) src.getRaster().getDataBuffer()).getData(); + int[] dstbuf = ((DataBufferInt) this.bitmap.getRaster().getDataBuffer()).getData(); + int width = intX + src.getWidth() > this.bitmap.getWidth() ? this.getWidth() - intX : src.getWidth(); + int height = intY + src.getHeight() > this.bitmap.getHeight() ? this.getHeight() - intY : src.getHeight(); + int dstoffs = intX + intY * this.bitmap.getWidth(); + int srcoffs = 0; + for (int i = 0; i < height; i++, dstoffs += this.bitmap.getWidth(), srcoffs += width) + System.arraycopy(srcbuf, srcoffs, dstbuf, dstoffs, width); + } else + this.canvas.drawImage(src, (int) x, (int) y, null); } @Override diff --git a/vtm/src/org/oscim/utils/BitmapPacker.java b/vtm/src/org/oscim/utils/BitmapPacker.java index d0b2cc4c..48c1d393 100755 --- a/vtm/src/org/oscim/utils/BitmapPacker.java +++ b/vtm/src/org/oscim/utils/BitmapPacker.java @@ -1,5 +1,6 @@ /* * Copyright 2017 Longri + * Copyright 2017 devemux86 * * Based on PixmapPacker from LibGdx converted to use VTM Bitmaps without any LibGdx dependencies: * https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/g2d/PixmapPacker.java @@ -89,7 +90,9 @@ public class BitmapPacker { final ArrayList<Object> addedRects = new ArrayList<>(); PackerAtlasItem(BitmapPacker packer) { - image = CanvasAdapter.newBitmap(packer.atlasWidth, packer.atlasHeight, 0); + // On Desktop we use BufferedImage.TYPE_INT_ARGB_PRE (3) format + int format = CanvasAdapter.platform.isDesktop() ? 3 : 0; + image = CanvasAdapter.newBitmap(packer.atlasWidth, packer.atlasHeight, format); canvas = CanvasAdapter.newCanvas(); canvas.setBitmap(this.image); canvas.fillColor(Color.TRANSPARENT);