![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TCanvas [WinXP]
Nigthmare © (2007-10-30 19:22:00)Привет всем !!!
Я обнаружил глюк в Delphi, короче, если через канву на 32-х битном битмапе
рисовать другой 32-х битный битмап, то вместо того чтобы по получившемуся альфа каналу выщитывать
цвет пикселей, процесс зарисовки сводится к простому заменению пикселей одного битмапа пикселями другого
битмапа.
Кто знает как избежать этотого глюка?
@!!ex (2007-11-17 23:05:00) [1]> А что там может быть еще? Например? (я с тобой не спорю,
> мне просто для интереса)
Вообще изначально ALpha канал не подразумевался как прозрачность.
Это был просто дополнительный информационный канал о цвете точки, я не помню уже точно для чего он был придуман, могу поискать материал, если надо.
Просто так сложилось что в большинстве случаев там хранится именно альфа.(мы, например, храним там LightMap, а в RGB - Specular).
ку? (2007-11-17 14:28:00) [2]Удалено модератором
hommro (2007-11-17 14:05:00) [3]Удалено модератором
Примечание: По твоей просьбе оглашаю, за нарушение режима RO продлен до 3 дней
Nightmare (2007-11-17 13:56:00) [4]Спасибо
Anatoly Podgoretsky (2007-11-17 13:49:00) [5]
> может есть какой нибудь справочник по всем этим функциям?
Есть MS SDK и он уже на твоем компьютере и есть его старший брат MSDN доступен и бесплатно через Сеть, на сайте Microsoft, вроде msdn2.microsoft.com
homm (2007-11-17 11:09:00) [6]> [15] Nightmare (17.11.07 11:04)
> а можно по русски
я ее прямо в окне оправки сообщения написал.
Nightmare (2007-11-17 11:04:00) [7]а можно по русски
homm (2007-11-17 10:52:00) [8]> [13] Nightmare (17.11.07 09:59)
> я её в первый раз вижу
я тоже. Предствляешь, я ее прямо в окен оправки сообщения написал ;)
Nightmare (2007-11-17 09:59:00) [9]Например ту же функцию Zero memory(я её в первый раз вижу).
может есть какой нибудь справочник по всем этим функциям?
homm (2007-11-17 09:34:00) [10]> [11] Nightmare (17.11.07 08:45)
> Где вы всё это берёте?
Что это?
Nightmare (2007-11-17 08:45:00) [11]Да........... Учится мне ещё и учиться.
P.S. Где вы всё это берёте?
homm (2007-11-16 22:02:00) [12]хотя-бы так…
procedure EraseBitmap(SourceBitmap: TBitmap);
var
i, j: Integer;
Delta: DWORD;
W, H: Integer;
begin
W := SourceBitmap.Width;
H := SourceBitmap.Height;
SL := SourceBitmap.ScanLine[0];
Delta := DWORD(SourceBitmap.ScanLine[1]) - DWORD(SourceBitmap.ScanLine[0]);
for i := 0 to H-1 do begin
ZeroMemory(SL, W*4);
SL := Pointer(DWORD(SL) + Delta);
end;
end;
homm (2007-11-16 21:57:00) [13]Удалено модератором
Nightmare (2007-11-16 21:51:00) [14]Вообще я использовал функция Alphablend просто и со вкусом, правда
если надо чтобы та канва на которую рисуется изображение была 32 бита надо перед этим её очистить(мне это надо было для Update Layred window)
процедурка очистки ниже:
procedure FreeBitmap(SourceBitmap: TBitmap);
type
ARGBQuad = array [0..0] of TRGBQuad;
PARGBQuad = ^ARGBQuad;
AByte = array [0..0] of Byte;
PAByte = ^AByte;
var
SL: PARGBQuad;
R: ^TRGBQuad;
i, j: Integer;
Delta: DWORD;
W, H: Integer;
begin
W := SourceBitmap.Width;
H := SourceBitmap.Height;
SL := SourceBitmap.ScanLine[0];
Delta := DWORD(SourceBitmap.ScanLine[1]) - DWORD(SourceBitmap.ScanLine[0]);
for i := 0 to H-1 do begin
for j := 0 to W-1 do begin
R := @SL[j];
R.rgbBlue := 0;
R.rgbGreen := 0;
R.rgbRed := 0;
R.rgbReserved := 0;
end;
SL := Pointer(DWORD(SL) + Delta);
end;
end;
Ins (2007-11-06 22:45:00) [15]Nigthmare
Гляньте здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=46659
homm (2007-10-31 17:47:00) [16]> [5] Ricks © (31.10.07 17:38)
> А что там может быть еще?
Может ничего не быть. Может быть стнсил буфер (как он там называется). Все что угодно может быть, на то он и резервный.
Ricks (2007-10-31 17:38:00) [17]
> Нигде не написано, что разарвный байт 32-х битного цвета
> — это альфаканал, соответственно никто его как альфу обрабатывать
> не должен.
А что там может быть еще? Например? (я с тобой не спорю, мне просто для интереса)
homm (2007-10-30 21:55:00) [18]> [0] Nigthmare (30.10.07 19:22)
> Кто знает как избежать этотого глюка?
Глюк в твей днк. Нигде не написано, что разарвный байт 32-х битного цвета — это альфаканал, соответственно никто его как альфу обрабатывать не должен.
Nigthmare (2007-10-30 21:51:00) [19]Мда, как всё мудно... но всёравно спасибо за ответы.
Sapersky (2007-10-30 20:11:00) [20]Это не глюк. TCanvas - обёртка на GDI, а в GDI альфа-блендинга нет.
Точнее, есть функция AlphaBlend, но в Win98 она работает нестабильно или вообще не работает; видимо, из желания сохранить совместимость с Win9x борландовцы не стали её использовать.
По использованию AlphaBlend:
http://rsdn.ru/archive/vc/issues/pvc045.htm
Или см. сюда:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1192964708&n=7