Question

I'm resizing a bird image using the following code:

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 }

The image is resized but it has white background along with it as shown. How to get only resized image with transparent background..?

Was it helpful?

Solution

Here is an Image scaling function I've been using. Includes transparency. Found here: 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);

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top