vtm/src/org/oscim/theme/renderinstruction/BitmapUtils.java
2013-10-09 01:55:52 +02:00

80 lines
2.7 KiB
Java

/*
* Copyright 2010, 2011, 2012 mapsforge.org
*
* This program is free software: you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.oscim.theme.renderinstruction;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Shader.TileMode;
public final class BitmapUtils {
private static final String PREFIX_FILE = "file:";
private static final String PREFIX_JAR = "jar:";
private static InputStream createInputStream(String src) throws FileNotFoundException {
if (src.startsWith(PREFIX_JAR)) {
String name = "/org/oscim/theme/styles/" + src.substring(PREFIX_JAR.length());
InputStream inputStream = BitmapUtils.class.getResourceAsStream(name);
if (inputStream == null) {
throw new FileNotFoundException("resource not found: " + src + " " + name);
}
return inputStream;
} else if (src.startsWith(PREFIX_FILE)) {
File file = new File(src.substring(PREFIX_FILE.length()));
if (!file.exists()) {
throw new IllegalArgumentException("file does not exist: " + src);
} else if (!file.isFile()) {
throw new IllegalArgumentException("not a file: " + src);
} else if (!file.canRead()) {
throw new IllegalArgumentException("cannot read file: " + src);
}
return new FileInputStream(file);
}
throw new IllegalArgumentException("invalid bitmap source: " + src);
}
public static Bitmap createBitmap(String src) throws IOException {
if (src == null || src.length() == 0) {
// no image source defined
return null;
}
InputStream inputStream = createInputStream(src);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
inputStream.close();
return bitmap;
}
static BitmapShader createBitmapShader(String src) throws IOException {
Bitmap bitmap = BitmapUtils.createBitmap(src);
if (bitmap == null) {
return null;
}
return new BitmapShader(bitmap, TileMode.REPEAT, TileMode.REPEAT);
}
private BitmapUtils() {
throw new IllegalStateException();
}
}