Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1195620885
Sergl
2007-11-21 07:54
2007.12.16
Корректность алгоритма программы(сетевой тест) на сокетах


15-1195127822
alex_***
2007-11-15 14:57
2007.12.16
аналог self в vb6


2-1193993327
r.o.o.t
2007-11-02 11:48
2007.12.16
Почему такое бывает


11-1181380412
mdw
2007-06-09 13:13
2007.12.16
Версия 2.65


15-1195044941
savyhinst
2007-11-14 15:55
2007.12.16
Несовместимое приложение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский