Autor Temat: Problem z obrazkami i przezroczystością
Viper87
Typ: neutral Postów: 490 Zarejestrowany: Oct 2002
Problem z obrazkami i przezroczystością Witam!Od razu zaznaczam, że nie biorę udziału w konkursie .Chciałem zrobić grę w której potrzebuję kulek. Ma to być graficznie coś podobnego do http://www.marbit.com.pl/kulki.htm . Reguły jednak będą zupełnie inne. Mój kłopot polega na tym, że chciałbym, aby użytkownik miał możliwość zmiany tła. Jednak na tym tle będą wyświetlać się owe kulki z określonym tłem. Moje pytanie brzmi: co mam zrobić, żeby tego tła nie było widać? (było przezroczyste). Podpatrzyłem budowę gry Marbitu (adres powyżej) i zauważyłem w katalogu programu plik *.bmp z kulkami - to właśnie bezpośrednio z niego gra pobiera wygląd kulek. Drugie pytanie brzmi na czym to polega i jak zrobić takie coś w VB!?Z góry dziękuję za pomoc. _____________________________________________Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać)
28-08-2004 15:10
kicaj
Typ: neutral Postów: 271 Zarejestrowany: Aug 2003
Sa cztery mozliwosci robienia przezroczystych obrazkow:1. Uzycie Image i przezroczystych gifow2. kolorwanie pixeli o danym kolorze na kolor tla ( [url=http://vb4all.canpol.pl/workshop/trans.zip]http://vb4all.canpol.pl/workshop/trans.zip Mozna ulepszyc te funkcje o API3. Uzycie BitBlt i masek, bardzo fajne i szybkie4. Uzycie TransparentBlt (jakos tak sie nazywalo) wkleja Ci obraze baz koloru podanego w parametrzemasz tu jej deklaracje:Private Declare Function TransparentBlt Lib "msimg32.dll" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal crTransparent As Long) As Booleanuzywa sie jej tak samo jak BitBlt ostatni parametr to kolor maski
28-08-2004 16:13
3914568
marcin_an Forumowicz
Typ: neutral Postów: 1265 Zarejestrowany: Mar 2004
5. Użycie ImageList. Jako .MaskColor Podajesz kolor, który ma byc przezroczysty. Następnie pobierasz z ImageList obrazki (tak jak normalnie), tyle, że metodą .ExtractIcon. To zwraca obraz z efektem przezroczystości, który potem można użyć np. do PaintPicture.Sposobu (2) nie polecam pod VB... niestety, jest zbyt powolny [Post edytowany dnia 28-08-2004 17:43 przez marcin_an]_____________________________________________Popieram losmaca: 1) Ludzie, dbajcie o polszczyznę!!! 2) Ludzie, zadawajcie kompletne pytania, a nie - rzucacie ochłapy i trzeba się domyślać o co chodzi!!! ___ NOWE FORUM http://forum.jelcyn.webd.pl/
28-08-2004 17:40
Viper87
Typ: neutral Postów: 490 Zarejestrowany: Oct 2002
Dziękuję Wam bardzo. Ponieważ moje obrazki są statyczne wykorzystałem sposób nr 1 . Pozdrawiam. _____________________________________________Viper "Savoir c`est prevoir, prevoir c`est prevenir". (Wiedzieć to przewidzieć, przewidzieć to zapobiegać)
30-08-2004 17:05
kicaj
Typ: neutral Postów: 271 Zarejestrowany: Aug 2003
Osobiscie proponowal bym Ci uzycie sposobu numer 4, poniewaz:1) przyspieszasz dzialanie programu bo nie ladujesz kontrolek image , jedynie to conajwyzej dwa PictureBoxy2) jak bedziesz chcial sie kiedys przerzycic na DirectX bedzie latwiej3) a trzecie primo... to nie wiem co napisac
30-08-2004 23:25
3914568
bisiek
Typ: neutral Postów: 487 Zarejestrowany: Jul 2003
Raczej użyj sposobu 3, a nie 4, bo TransparentBlt zżera pamięć, a BitBlt nie. _____________________________________________www.mob.abc.pl - moja strona o VB
30-08-2004 23:27
3380672
kicaj
Typ: neutral Postów: 271 Zarejestrowany: Aug 2003
Ale jesli chlopak nie bawil sie nigdy z maskami to ma problem, a pozatym do zrobienia przezroczystosci za uzyciem BitBlt trzeba wywolac ja dwa razy, i miec gotowa maske :-)
30-08-2004 23:32
3914568
bisiek
Typ: neutral Postów: 487 Zarejestrowany: Jul 2003
Maskę dla klulki nie jest trudno zrobić, a przykłady z użyciem BitBlt są np. na vbtools. Zresztą - po to jest forum, żeby pytać _____________________________________________www.mob.abc.pl - moja strona o VB
31-08-2004 10:24
3380672
Wszystkich odpowiedzi: 7 :: Maxymalnie na stronę: 20