2013-11-27 3 views
0

Я изменение размера птицы изображения, используя следующий код:изображение Масштабирование J2ME

частное изображение resizeImage (ЦСИ Image) {

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 }

изображение изменено, но оно имеет белый фон вместе с ним, как показано на рисунке. Как получить только измененное изображение с прозрачным фоном ..?

ответ

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

}

+0

Спасибо за ур ответ .. Я попробовал этот метод. Теперь я вижу черные пиксели вместо белых пикселей в качестве фона. Его не transaparent. – Andy

+0

Это очень странно. Я использовал его для нашей последней игры piratediamonds.com, как с 8-битными, так и с 24-битными файлами PNG. Не забудьте поставить «true» в качестве последнего параметра в обратном методе Image.createRGBImage. –

+0

Теперь он работает. Но на устройстве его время для изменения размера. Любой алгоритм, чтобы сделать его быстрее? – Andy

Смежные вопросы