Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизTCanvas Найти похожие ветки
← →
Nigthmare (2007-10-30 19:22) [0]Привет всем !!!
Я обнаружил глюк в Delphi, короче, если через канву на 32-х битном битмапе
рисовать другой 32-х битный битмап, то вместо того чтобы по получившемуся альфа каналу выщитывать
цвет пикселей, процесс зарисовки сводится к простому заменению пикселей одного битмапа пикселями другого
битмапа.
Кто знает как избежать этотого глюка?
← →
Ricks © (2007-10-30 20:02) [1]Самому написать отрисовку, или посмотреть тему alpha draw
← →
Sapersky (2007-10-30 20:11) [2]Это не глюк. TCanvas - обёртка на GDI, а в GDI альфа-блендинга нет.
Точнее, есть функция AlphaBlend, но в Win98 она работает нестабильно или вообще не работает; видимо, из желания сохранить совместимость с Win9x борландовцы не стали её использовать.
По использованию AlphaBlend:
http://rsdn.ru/archive/vc/issues/pvc045.htm
Или см. сюда:
http://delphimaster.net/view/8-1192964708/
← →
Nigthmare (2007-10-30 21:51) [3]Мда, как всё мудно... но всёравно спасибо за ответы.
← →
homm © (2007-10-30 21:55) [4]> [0] Nigthmare (30.10.07 19:22)
> Кто знает как избежать этотого глюка?
Глюк в твей днк. Нигде не написано, что разарвный байт 32-х битного цвета — это альфаканал, соответственно никто его как альфу обрабатывать не должен.
← →
Ricks © (2007-10-31 17:38) [5]
> Нигде не написано, что разарвный байт 32-х битного цвета
> — это альфаканал, соответственно никто его как альфу обрабатывать
> не должен.
А что там может быть еще? Например? (я с тобой не спорю, мне просто для интереса)
← →
homm © (2007-10-31 17:47) [6]> [5] Ricks © (31.10.07 17:38)
> А что там может быть еще?
Может ничего не быть. Может быть стнсил буфер (как он там называется). Все что угодно может быть, на то он и резервный.
← →
Ins © (2007-11-06 22:45) [7]Nigthmare
Гляньте здесь:
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=46659
← →
Nightmare (2007-11-16 21:51) [8]Вообще я использовал функция 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;
← →
homm © (2007-11-16 21:57) [9]Удалено модератором
← →
homm © (2007-11-16 22:02) [10]хотя-бы так…
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;
← →
Nightmare (2007-11-17 08:45) [11]Да........... Учится мне ещё и учиться.
P.S. Где вы всё это берёте?
← →
homm © (2007-11-17 09:34) [12]> [11] Nightmare (17.11.07 08:45)
> Где вы всё это берёте?
Что это?
← →
Nightmare (2007-11-17 09:59) [13]Например ту же функцию Zero memory(я её в первый раз вижу).
может есть какой нибудь справочник по всем этим функциям?
← →
homm © (2007-11-17 10:52) [14]> [13] Nightmare (17.11.07 09:59)
> я её в первый раз вижу
я тоже. Предствляешь, я ее прямо в окен оправки сообщения написал ;)
← →
Nightmare (2007-11-17 11:04) [15]а можно по русски
← →
homm © (2007-11-17 11:09) [16]> [15] Nightmare (17.11.07 11:04)
> а можно по русски
я ее прямо в окне оправки сообщения написал.
← →
Anatoly Podgoretsky © (2007-11-17 13:49) [17]
> может есть какой нибудь справочник по всем этим функциям?
Есть MS SDK и он уже на твоем компьютере и есть его старший брат MSDN доступен и бесплатно через Сеть, на сайте Microsoft, вроде msdn2.microsoft.com
← →
Nightmare (2007-11-17 13:56) [18]Спасибо
← →
hommro (2007-11-17 14:05) [19]Удалено модератором
Примечание: По твоей просьбе оглашаю, за нарушение режима RO продлен до 3 дней
← →
ку? (2007-11-17 14:28) [20]Удалено модератором
← →
@!!ex © (2007-11-17 23:05) [21]> А что там может быть еще? Например? (я с тобой не спорю,
> мне просто для интереса)
Вообще изначально ALpha канал не подразумевался как прозрачность.
Это был просто дополнительный информационный канал о цвете точки, я не помню уже точно для чего он был придуман, могу поискать материал, если надо.
Просто так сложилось что в большинстве случаев там хранится именно альфа.(мы, например, храним там LightMap, а в RGB - Specular).
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.044 c