Запросы для написания библиотек обычно дают в теме "Запросы на написание библиотек". Ну и ладно.
Библиотека:
import javax.microedition.lcdui.Image;
public class Lib_alphamage
{
public static String version() { return "1.0"; }
public static Image combine(Image rgb, Image a)
{
int w = rgb.getWidth(), h = rgb.getHeight(), l = w * h;
int r[] = new int[l], o[] = new int[l];
rgb.getRGB(r, 0, w, 0, 0, w, h);
a.getRGB(o, 0, w, 0, 0, w, h);
int i;
for (i = 0; i < l; i++)
{
r[i] = (r[i] & 0xFFFFFF) | ((o[i] & 0xFF) << 24);
}
return Image.createRGBImage(r, w, h, true);
}
public static Image copy(Image src, int x, int y, int w, int h, int t)
{
return Image.createImage(src, x, y, w, h, t);
}
}
Тест:
program teest;
uses alphaMage;
var i1, i2, i3: image;
i: integer;
begin
setColor(0, 64, 192);
fillRect(0, 0, getWidth, getHeight);
i1 := loadImage('/i1.png');
i2 := loadImage('/i2.png');
i3 := alphaMage.combine(i1, i2);
i := getImageHeight(i1);
drawImage(i1, 0, 0);
drawImage(i2, 0, i);
drawImage(i3, 0, i*2);
rePaint;
delay(10000);
end.
Скриншот с теста:
Примечания:
1. Поскольку использован простой алгоритм, попытка совместить изображения разных размеров скорее всего завершится крахом программы.
2. По причине подобной примечанию 1, во внимание берется лишь синий канал изображения-альфа-маски.
3. Для опережения потенциального следующего вопроса, включена функция .copy(image, top, left, width, height, transform). Стандартный метод получения изображения из изображения в MP не берет во внимание alpha-канал вовсе.
Дополнительно:
1. Документация по Java ME (CLDC 1.1):
http://java.sun.com/javame/reference...w-summary.html
2. Возможно порой стоит клацать кнопку "Полезно!" вместо\помимо написания сообщения с такой же целью?