forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Lib_alpha: Прозрачность картинок (http://forum.boolean.name/showthread.php?t=6058)

odd 04.07.2008 08:34

Ответ: Lib_alpha: Прозрачность картинок
 
Вложений: 1
Добавил ещё функцию SetTransparentColor.
Скажем, у вас есть картинка im с белым фоном. Делаем:

SetTransparentColor(255, 255, 255);
im = SetOpaque(im, 255);


И получим ту же картинку, но уже с прозрачным фоном.
То же касается и полупрозрачных картинок.
Если раскинуть мозгами, можно теперь делать довольно интересные графические эффекты в играх.

GOODBYTE 04.07.2008 15:13

Ответ: 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.


ViNT 04.07.2008 15:29

Ответ: Lib_alpha: Прозрачность картинок
 
Ну так 255 это же полная прозрачность?
Вот и получается, что каждый раз в цикле изображению ставится полная прозрачность и его не видно. К тому же я сомневаюсь, что белый пиксель с наложенной альфой будет соответствовать чисто белому пикселю.

GOODBYTE 04.07.2008 15:32

Ответ: Lib_alpha: Прозрачность картинок
 
ViNT, ну если тогда подумать то оно бы должно было медленно переходить из обычной картинки в прозрачную. Но этого почему то не происходит, хотя я там задержку же поставил...
попробую еще похимичить

ViNT 04.07.2008 15:37

Ответ: 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.


GOODBYTE 04.07.2008 18:17

Ответ: Lib_alpha: Прозрачность картинок
 
уф, логику нарушил. спс )

InkutaY 04.07.2008 23:37

Ответ: Lib_alpha: Прозрачность картинок
 
А можно в стелать процедуру в библиотеку, что бы она меняла в картинке определенный цвет на другой?

odd 05.07.2008 03:29

Ответ: Lib_alpha: Прозрачность картинок
 
Цитата:

Сообщение от InkutaY (Сообщение 81741)
А можно в стелать процедуру в библиотеку, что бы она меняла в картинке определенный цвет на другой?

Да легко. Скоро будет. Ждите.

Кстати, для новичков: GetAlphaLevels по-идее возвращает 256 в то время как максимальная принимаемая функцией SetOpaque прозрачность равна 255. Намёк ясен?

Кстати, в функции SetTransparentColor порядок цветов нарушен. Надо RGB, а там BGR какой-то получился. :) Пофиксю одновременно с выходом функции замены одного цвета на другой.

InkutaY 05.07.2008 03:32

Ответ: Lib_alpha: Прозрачность картинок
 
Класно!, буду ждать :) спс

ViNT 05.07.2008 14:46

Ответ: Lib_alpha: Прозрачность картинок
 
odd, советую в новой версии сделать возможность задания прозрачного/заменяемого цвета в формате ARGB, а не RGB, и функцию для определения цвета указанного пикселя в ARGB формате.

odd 06.07.2008 03:34

Ответ: Lib_alpha: Прозрачность картинок
 
Вложений: 1
Цитата:

Сообщение от ViNT (Сообщение 81756)
odd, советую в новой версии сделать возможность задания прозрачного/заменяемого цвета в формате ARGB, а не RGB, и функцию для определения цвета указанного пикселя в ARGB формате.

Хорошо, добавлю. А пока держите RGB версию. Добавлена функция замены цвета ReplaceColor.

odd 08.07.2008 08:41

Ответ: Lib_alpha: Прозрачность картинок
 
Вложений: 1
Как и обещал, всё сделал. Держите.

Пример выполнения:
Код:

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 формате.

beisik 14.07.2008 23:19

Ответ: Lib_alpha: Прозрачность картинок
 
Отличная библиотека, но бесит тот факт, что если в картинке уже есть прозрачность, то SetOpaque ее полностью убирает ):

odd 15.07.2008 07:58

Ответ: Lib_alpha: Прозрачность картинок
 
Цитата:

Сообщение от beisik (Сообщение 82273)
Отличная библиотека, но бесит тот факт, что если в картинке уже есть прозрачность, то SetOpaque ее полностью убирает ):

Меня лично ничего не бесит. Просто потом делаешь ReplaceColor на полностью прозрачный и всё.

Cliffe Snake 22.09.2008 07:17

Ответ: Lib_alpha: Прозрачность картинок
 
Ещё неплохо бы задавать прозрачность в функциях в процентах(0-100), а не числом(0-255). Хотя в принципе и так сойдет, спасиб за библу =)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot