Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.16;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
1-1191159510
Мурзик
2007-09-30 17:38
2007.12.16
Подскажите пожалуйста


11-1181215785
vpbar
2007-06-07 15:29
2007.12.16
Можно ли изменить цвет отдельной строчки в TKOLListView ?


2-1194980331
BD
2007-11-13 21:58
2007.12.16
Не считывается инфа из реестра под другим пользователем


1-1190356105
KokocIK
2007-09-21 10:28
2007.12.16
Прокрутка роликом в ScrollBox


15-1194973607
Cerberus
2007-11-13 20:06
2007.12.16
Статья или Исходник про архивацию в формате zip.