![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Stretch с помощью FastDIB [D7, 2003]
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);
Чтобы было заметнее, можно предварительно залить битмап серым или клеточками.
Или нужно потом как-то использовать альфа-канал результирующей картинки?