public Image scaleImage(Image src, int dstW, int dstH) {
int srcW = src.getWidth();
int srcH = src.getHeight();
Image tmp = Image.createImage(dstW, srcH);
Graphics g = tmp.getGraphics();
int delta = (srcW << 16) / dstW;
int pos = delta / 2;
for (int x = 0; x < dstW; x++) {
g.setClip(x, 0, 1, srcH);
g.drawImage(src, x - (pos >> 16), 0, TOP_LEFT);
pos += delta;
}
Image dst = Image.createImage(dstW, dstH);
g = dst.getGraphics();
delta = (srcH << 16) / dstH;
pos = delta / 2;
for (int y = 0; y < dstH; y++) {
g.setClip(0, y, dstW, 1);
g.drawImage(tmp, 0, y - (pos >> 16), TOP_LEFT);
pos += delta;
}
int[] d = new int[dstW * dstH];
dst.getRGB(d, 0, dstW, 0, 0, dstW, dstH);
for (int i = 0; i < d.length; i++) {
if (d[i] == -1) d[i] = 0;
}
dst = Image.createRGBImage(d, dstW, dstH, true);
return dst;
}