|
04.07.2008, 08:34
|
#16
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Добавил ещё функцию SetTransparentColor.
Скажем, у вас есть картинка im с белым фоном. Делаем:
SetTransparentColor(255, 255, 255);
im = SetOpaque(im, 255);
И получим ту же картинку, но уже с прозрачным фоном.
То же касается и полупрозрачных картинок.
Если раскинуть мозгами, можно теперь делать довольно интересные графические эффекты в играх.
|
(Offline)
|
|
Эти 5 пользователя(ей) сказали Спасибо odd за это полезное сообщение:
|
|
04.07.2008, 15:13
|
#17
|
AnyKey`щик
Регистрация: 21.06.2008
Адрес: Нижегородская обл.
Сообщений: 17
Написано одно полезное сообщение
|
Ответ: Lib_alpha: Прозрачность картинок
я тут попробывал сделать мидлет, с использованием твоей библиотеки, но в результате получил что он не загружает картинку, а выводит почему-то только фон..
Не подскажешь, в чём ошибка?
program hello;
uses alpha;
var load_image : image;
im_h, im_w, h, w, ph, pw, i : integer;
begin
load_image := loadImage('/media.png');
h := getHeight;
w := getWidth;
im_w := getImageWidth(load_image);
im_h := getImageHeight(load_image);
(* вычиселение новых координат :) *)
ph := h / 2;
pw := (w / 2) - (im_w / 2);
for i := 1 to alpha.GetAlphaLevels do
begin
setColor(0, 0, 0);
FillRect(0, 0, w, h);
alpha.SetTransparentColor(255,255,255);
load_image := alpha.SetOpaque(load_image,alpha.GetAlphaLevels);
DrawImage(load_image, pw, ph);
repaint;
delay(2);
end;
set_color(255,255,255);
drawText('Hello world!', 0, 0);
repaint;
delay(2000);
end.
__________________
..глаза боятся, руки делают..
|
(Offline)
|
|
04.07.2008, 15:29
|
#18
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Ну так 255 это же полная прозрачность?
Вот и получается, что каждый раз в цикле изображению ставится полная прозрачность и его не видно. К тому же я сомневаюсь, что белый пиксель с наложенной альфой будет соответствовать чисто белому пикселю.
|
(Offline)
|
|
04.07.2008, 15:32
|
#19
|
AnyKey`щик
Регистрация: 21.06.2008
Адрес: Нижегородская обл.
Сообщений: 17
Написано одно полезное сообщение
|
Ответ: Lib_alpha: Прозрачность картинок
ViNT, ну если тогда подумать то оно бы должно было медленно переходить из обычной картинки в прозрачную. Но этого почему то не происходит, хотя я там задержку же поставил...
попробую еще похимичить
__________________
..глаза боятся, руки делают..
|
(Offline)
|
|
04.07.2008, 15:37
|
#20
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Где ж оно будет переходить если написано:
load_image := alpha.SetOpaque(load_image, alpha.GetAlphaLevels);?
Во-первых, нужно поставить i вместо выделенного, во-вторых, картинку каждый раз нужно грузить снова, т.к. он уже после первой обработки не содержит ни одного белого пиксела.
Тогда уж так:
uses alpha;
var load_image,im : image;
im_h, im_w, h, w, ph, pw, i : integer;
begin
load_image := loadImage('/img.png');
h := getHeight;
w := getWidth;
im_w := getImageWidth(load_image);
im_h := getImageHeight(load_image);
(* вычиселение новых координат :) *)
ph := h / 2;
pw := (w / 2) - (im_w / 2);
alpha.SetTransparentColor(255,255,255);
setColor(0, 0, 0);
for i := alpha.GetAlphaLevels downto 0 do
begin
FillRect(0, 0, w, h);
im := alpha.SetOpaque(load_image,I);
DrawImage(im, pw, ph);
repaint;
delay(10);
end;
setcolor(255,255,255);
drawText('Hello world!', 0, 0);
repaint;
delay(2000);
end.
Последний раз редактировалось ViNT, 04.07.2008 в 15:47.
|
(Offline)
|
|
04.07.2008, 18:17
|
#21
|
AnyKey`щик
Регистрация: 21.06.2008
Адрес: Нижегородская обл.
Сообщений: 17
Написано одно полезное сообщение
|
Ответ: Lib_alpha: Прозрачность картинок
уф, логику нарушил. спс )
__________________
..глаза боятся, руки делают..
|
(Offline)
|
|
04.07.2008, 23:37
|
#22
|
Оператор ЭВМ
Регистрация: 13.06.2008
Адрес: Сочи
Сообщений: 43
Написано 6 полезных сообщений (для 12 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
А можно в стелать процедуру в библиотеку, что бы она меняла в картинке определенный цвет на другой?
|
(Offline)
|
|
05.07.2008, 03:29
|
#23
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Сообщение от InkutaY
А можно в стелать процедуру в библиотеку, что бы она меняла в картинке определенный цвет на другой?
|
Да легко. Скоро будет. Ждите.
Кстати, для новичков: GetAlphaLevels по-идее возвращает 256 в то время как максимальная принимаемая функцией SetOpaque прозрачность равна 255. Намёк ясен?
Кстати, в функции SetTransparentColor порядок цветов нарушен. Надо RGB, а там BGR какой-то получился. Пофиксю одновременно с выходом функции замены одного цвета на другой.
|
(Offline)
|
|
05.07.2008, 03:32
|
#24
|
Оператор ЭВМ
Регистрация: 13.06.2008
Адрес: Сочи
Сообщений: 43
Написано 6 полезных сообщений (для 12 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Класно!, буду ждать спс
|
(Offline)
|
|
05.07.2008, 14:46
|
#25
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
odd, советую в новой версии сделать возможность задания прозрачного/заменяемого цвета в формате ARGB, а не RGB, и функцию для определения цвета указанного пикселя в ARGB формате.
|
(Offline)
|
|
06.07.2008, 03:34
|
#26
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Сообщение от ViNT
odd, советую в новой версии сделать возможность задания прозрачного/заменяемого цвета в формате ARGB, а не RGB, и функцию для определения цвета указанного пикселя в ARGB формате.
|
Хорошо, добавлю. А пока держите RGB версию. Добавлена функция замены цвета ReplaceColor.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
08.07.2008, 08:41
|
#27
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Как и обещал, всё сделал. Держите.
Пример выполнения:
Program AlphaTest;
Uses alpha;
Var im: image;
Begin
im:=LoadImage('/world.png'); // Загружаем картинку
DrawImage(im, 5, 5); // Рисуем её
im:=SetOpaque(im, 127); // Ставим общую прозрачность картинки на 50%
im:=ReplaceColor(im, GetColor(im, 0, 0), 0); // Заменяем цвет фона на прозрачный
DrawImage(im, 25, 25); // Рисуем вторую картинку чуть ниже для сравнения
Repaint; Delay(10000);
End.
Добавлена функция GetColor(image im, int x, int y) которая возвращает цвет пиксела в картинке с выбранными координатами в ARGB формате.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
14.07.2008, 23:19
|
#28
|
Нуждающийся
Регистрация: 23.04.2008
Адрес: Брест, Беларусь
Сообщений: 53
Написано 10 полезных сообщений (для 18 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Отличная библиотека, но бесит тот факт, что если в картинке уже есть прозрачность, то SetOpaque ее полностью убирает ):
|
(Offline)
|
|
15.07.2008, 07:58
|
#29
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Сообщение от beisik
Отличная библиотека, но бесит тот факт, что если в картинке уже есть прозрачность, то SetOpaque ее полностью убирает ):
|
Меня лично ничего не бесит. Просто потом делаешь ReplaceColor на полностью прозрачный и всё.
|
(Offline)
|
|
22.09.2008, 07:17
|
#30
|
Нуждающийся
Регистрация: 22.09.2008
Сообщений: 74
Написано 8 полезных сообщений (для 12 пользователей)
|
Ответ: Lib_alpha: Прозрачность картинок
Ещё неплохо бы задавать прозрачность в функциях в процентах(0-100), а не числом(0-255). Хотя в принципе и так сойдет, спасиб за библу =)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:20.
|