Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Stretch с помощью FastDIB [D7, 2003]


Страницы:   1 2

Fox ©   (2014-09-20 14:38:00) 

Здравствуйте!
Есть код, который позволяет качественно изменять размеры PNG-картинки с помощью FastDIB, но только с потерей прозрачности. Подскажите как его можно изменить, чтобы поддерживалась прозрачность и полупрозрачность. Заранее спасибо!

uses PNGImage, FastDIB, FastSize;
Procedure DrawMy(X,Y:Integer;DrIn:TPNGObject;DrOut:TImage;W,H:Integer);
Var TB:TBitmap;
   BMP1: TFastDIB;
   BMP2: TFastDIB;
begin
BMP1 := TFastDIB.Create;
BMP2 := TFastDIB.Create;
TB   := TBitmap.Create;
TB.Width :=DrIn.Width;
TB.Height:=DrIn.Height;
TB.Canvas.Draw(0,0,DrIn);
TB.PixelFormat:=pf24bit;
BMP1.LoadFromHandle(TB.Handle);
BMP2.SetSize(W,H,24);
SmoothResize24(BMP1,BMP2,rfSpline3);
BMP2.Draw(DrOut.Canvas.Handle, X, Y);
BMP1.Free;
BMP2.Free;
TB.Free;
end;


Fox   (2014-09-20 18:38:00) [21]

Версия FastDIB 3.9
http://www.dizaak.narod.ru/Stretch0.rar


Rouse_   (2014-09-20 18:29:00) [22]

хм, вроде не совсем то...
Выложи демо проектик с текущей версией FastDIB, которую используешь. Гляну.


Rouse_   (2014-09-20 18:27:00) [23]

http://graphicsmagic.googlecode.com/svn/trunk/GraphicsMagicLib/gmImageTile.pas


Fox   (2014-09-20 18:24:00) [24]

Хорошо, что тут не так?

uses PNGImage, FastDIB, FastSize;
Procedure DrawMy(X,Y:Integer;DrIn:TPNGObject;DrOut:TImage;W,H:Integer);
Var TB:TBitmap;
   BMP1: TFastDIB;
   BMP2: TFastDIB;
begin
BMP1 := TFastDIB.Create;
BMP2 := TFastDIB.Create;
TB   := TBitmap.Create;
TB.Width :=DrIn.Width;
TB.Height:=DrIn.Height;
TB.PixelFormat:=pf32bit;
TB.Canvas.Draw(0,0,DrIn);
BMP1.LoadFromHandle(TB.Handle);
BMP2.SetSize(W,H,32);
SmoothResize32(BMP1,BMP2,rfSpline3);
BMP2.Draw(DrOut.Canvas.Handle, X, Y);
BMP1.Free;
BMP2.Free;
TB.Free;
end;


Rouse_   (2014-09-20 18:18:00) [25]

TB.PixelFormat:=pf24bit;
Тут ничего не смущает? Альфа это, на секундочку, 32 бита...


Jo   (2014-09-20 18:02:00) [26]

Пробовал, результат тот же - без прозрачности.


junglecat   (2014-09-20 18:01:00) [27]

значит, нужно что-то типа SmoothResize32


Jo   (2014-09-20 17:37:00) [28]

>Или нужно потом как-то использовать альфа-канал результирующей картинки?
Да, теряется альфа-канал при изменении размеров картинки. То есть при рисовании на DrOut альфа-канала уже нет.


invis   (2014-09-20 17:21:00) [29]

Если только для отображения, то прозрачность и так должна применяться при рисовании TPngImage в битмап:
TB.Canvas.Draw(0,0,DrIn);
Чтобы было заметнее, можно предварительно залить битмап серым или клеточками.
Или нужно потом как-то использовать альфа-канал результирующей картинки?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо