我正在使用以下代码调整鸟图像的大小:
private Image resizeImage(Image src){
int srcWidth = src.getWidth(); int srcHeight = src.getHeight(); int screenWidth=getWidth()/3; int screenHeight=getHeight()/3; Image tmp = Image.createImage(screenWidth, srcHeight); Graphics g = tmp.getGraphics(); int ratio = (srcWidth << 16) / screenWidth; int pos = ratio/2; //Horizontal Resize for (int x = 0; x < screenWidth; x++) { g.setClip(x, 0, 1, srcHeight); g.drawImage(src, x - (pos >> 16), 0, Graphics.LEFT | Graphics.TOP); pos += ratio; } Image resizedImage = Image.createImage(screenWidth, screenHeight); g = resizedImage.getGraphics(); ratio = (srcHeight << 16) / screenHeight; pos = ratio/2; //Vertical resize for (int y = 0; y < screenHeight; y++) { g.setClip(0, y, screenWidth, 1); g.drawImage(tmp, 0, y - (pos >> 16), Graphics.LEFT | Graphics.TOP); pos += ratio; } return resizedImage;
}
图像已调整大小,但如图所示,它具有白色背景。如何获得透明背景的仅调整大小的图像..?
答案 0 :(得分:0)
这是我一直在使用的图像缩放功能。包括透明度。在此处找到:http://willperone.net/Code/codescaling.php
public Image scale(Image original, int newWidth, int newHeight) {
int[] rawInput = new int[original.getHeight() * original.getWidth()];
original.getRGB(rawInput, 0, original.getWidth(), 0, 0, original.getWidth(), original.getHeight());
int[] rawOutput = new int[newWidth * newHeight];
// YD compensates for the x loop by subtracting the width back out
int YD = (original.getHeight() / newHeight) * original.getWidth() - original.getWidth();
int YR = original.getHeight() % newHeight;
int XD = original.getWidth() / newWidth;
int XR = original.getWidth() % newWidth;
int outOffset = 0;
int inOffset = 0;
for (int y = newHeight, YE = 0; y > 0; y--) {
for (int x = newWidth, XE = 0; x > 0; x--) {
rawOutput[outOffset++] = rawInput[inOffset];
inOffset += XD;
XE += XR;
if (XE >= newWidth) {
XE -= newWidth;
inOffset++;
}
}
inOffset += YD;
YE += YR;
if (YE >= newHeight) {
YE -= newHeight;
inOffset += original.getWidth();
}
}
rawInput = null;
return Image.createRGBImage(rawOutput, newWidth, newHeight, true);
}