Graphics API #328 improvements
This commit is contained in:
parent
e562ebdff6
commit
5818edc228
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user