Форум: "Прочее";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
ВнизUpdateLayeredWindow Найти похожие ветки
← →
Dmitry S © (2008-02-03 18:07) [0]Объясните, пожалуйста, по-русски и популярно, что делает subj-овая функция.
← →
DVM © (2008-02-03 18:10) [1]говорит Windows, что это окно будет само отвечать за свою отрисовку, этому окну перестают приходить сообщения WM_PAINT и далее окно само должно вызывать указанную функцию для своего обновления, передавая ей готовое изображение.
← →
DVM © (2008-02-03 18:12) [2]Вот, не совсем я тут согласен, но вполне понятно описано:
http://forum.vingrad.ru/forum/topic-54390.html
← →
Dmitry S © (2008-02-04 04:35) [3]Кстати везде пишут, что с Alpha каналом BMPшки не загружаются с помощью API шных функций. У меня легко открылась. Или это только в XP работает?
← →
ketmar © (2008-02-04 11:52) [4]>[3] Dmitry S ©(04.02.08 04:35)
загружаются. но без GDI+ и DirectX их нельзя блиттить с альфой. это в виду и имеют. т.е. канал — он есть, а толку с него нет.
← →
ketmar © (2008-02-04 11:53) [5]ну, то есть, нельзя блитить стандартными bitblt сотоварищи, я имел в виду.
← →
guav © (2008-02-04 11:59) [6]но можно билтить стандартной AlphaBlend.
← →
ketmar © (2008-02-04 12:07) [7]>[6] guav ©(04.02.08 11:59)
но в NT нет AlphaBlend.
← →
Ins © (2008-02-04 12:08) [8]
> но можно билтить стандартной AlphaBlend.
Угу. Пример - здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=46659
← →
guav © (2008-02-04 12:16) [9]> [7] ketmar © (04.02.08 12:07)
> но в NT нет
В NT сабжевой функции тоже нет, и что ?
Ещё Windows 95 вспомним, ага ?
← →
Dmitry S © (2008-02-04 12:21) [10]
> ketmar © (04.02.08 11:53) [5]
> procedure bmpAlphaPremulti(Bmp:HBITMAP);
> var
> BmpInfo:Windows.TBitmap;
> Point: PRGBQuad;
> I:Integer;
> begin
> GetObject(Bmp, SizeOf(BmpInfo), @BmpInfo);
> Point := BmpInfo.bmBits;
> for i:=0 to pred(BmpInfo.bmWidth * BmpInfo.bmHeight) do
> begin
> Point^.rgbBlue := MulDiv(Point^.rgbBlue, Point^.rgbReserved,
> 255);
> Point^.rgbGreen := MulDiv(Point^.rgbGreen, Point^.rgbReserved,
> 255);
> Point^.rgbRed := MulDiv(Point^.rgbRed, Point^.rgbReserved,
> 255);
> inc(Point);
> end;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var
> Bmp: HBITMAP;
> SurfaceDC, BmpDC: HDC;
> BmpInfo:Windows.TBitmap;
> BlendFunction: TBlendFunction;
> begin
> Bmp := LoadImage(
> HInstance,
> "src.bmp",
> IMAGE_BITMAP,
> 0,
> 0,
> LR_CREATEDIBSECTION
> or LR_DEFAULTSIZE
> or LR_LOADFROMFILE
> );
>
> SurfaceDC := GetDC(Handle);
> BmpDC := CreateCompatibleDC(SurfaceDC);
>
> SelectObject(BmpDC, Bmp);
>
> bmpAlphaPremulti(Bmp);
>
> GetObject(Bmp, SizeOf(BmpInfo), @BmpInfo);
>
> BlendFunction.BlendOp := AC_SRC_OVER;
> BlendFunction.BlendFlags := 0;
> BlendFunction.SourceConstantAlpha := 255;
> BlendFunction.AlphaFormat := AC_SRC_ALPHA;
>
> Windows.AlphaBlend(
> SurfaceDC, 0, 0, BmpInfo.bmWidth, BmpInfo.bmHeight,
> BmpDC, 0, 0, BmpInfo.bmWidth, BmpInfo.bmHeight,
> BlendFunction
> );
>
> end;
Если сильно хочешь, могу тоже самое сделать без AlphaBlend :)
← →
Dmitry S © (2008-02-04 12:23) [11]Упс, не ту кнопочку нажал:)
А, кстати, как AlphaBlend работает?
Копирует DestinationDC, потом на копию рисует SourceDC, а затем эту копию снова рисует на DestinationDC, или как?
← →
ketmar © (2008-02-04 13:03) [12]>[10] Dmitry S ©(04.02.08 12:21)
я тоже могу. ну и что?
← →
Dmitry S © (2008-02-04 13:05) [13]А то, что проблема надуманная :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c