在J2ME中重新调整图像

时间:2013-11-27 05:09:23

标签: image java-me

我正在使用以下代码调整鸟图像的大小:

  

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;
     

enter image description here       }

图像已调整大小,但如图所示,它具有白色背景。如何获得透明背景的仅调整大小的图像..?

1 个答案:

答案 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);

}