Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Библиотеки

Ответ
 
Опции темы
Старый 23.08.2011, 01:29   #1
YellowAfterlife
ПроЭктировщик
 
Аватар для YellowAfterlife
 
Регистрация: 19.02.2011
Сообщений: 134
Написано 81 полезных сообщений
(для 219 пользователей)
Lib_alphamage - приминение одного изображения как прозрачности для другого

Вкратце: можно сохранять графику не как 32-bit'ные PNG, а другие форматы (будь то 8-bit PNG, GIF, или даже JPG), и в последствии "совмещать" изображения, получая в MIDlet'е 32-bit'ную графику при меньшем размере файла.

Изображение: как это выглядит:


Функции в библиотеке:
function combine(rgb: image; alpha: image): image - совмещает два изображения (синий канал изображения alpha становится каналом прозрачности нового изображения) и возращает результирующее. Оригинальные изображения остаются неизменны.
function copy(src: image; x, y, width, height, transform: integer): image - функция создания изображения из части другого изображения с учетом прозрачности. transform может находится в диапазоне от 0 до 7 и указывает индекс трансформации (отражение\поворот) или ее отсутствие в случае указания нуля.
Пример кода:
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.

Исходный код библиотеки:
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);
	}
}


Примечание: изображения для функции combine должны быть одинаковых размеров. Иначе возможны неожиданные результаты, вплоть до краха программы.
Вложения
Тип файла: zip Lib_alphamage.zip (623 байт, 778 просмотров)
__________________

Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо YellowAfterlife за это полезное сообщение:
DIMMON4IK (23.08.2011), Igor (23.08.2011), im_zorg (23.08.2011)
Старый 23.08.2011, 17:09   #2
im_zorg
Знающий
 
Регистрация: 25.10.2009
Сообщений: 338
Написано 53 полезных сообщений
(для 61 пользователей)
Ответ: Lib_alphamage - приминение одного изображения как прозрачности для другого

Прикольно=) +1
__________________
Я вернулсо в мидлет паскаль О_о уже написал новый проект Сайт моей компании: http://mpcompany.ucoz.com/ Сайт проекта "Путник" : http://putnik-project.ru/
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 06:14.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com