[VB.NET] Przeźroczyste nachodzenie się dwóch pictureboxów


(adan2013) #1

Witam

Znalazłem wiele stron na ten temat, ale na żadnej nie znalazłem rozwiązania problemu.
Mam grafiki zapisane w formacie .png, które wyświetlam za pomocą kontrolek PictureBox. Problem polega na tym iż przeźroczyste tło zdjęcia nie powoduje, że tło kontrolki też jest przeźroczyste, nawet po ustawieniu parametru BackColor na Transparent. Chodzi po prostu o to aby po zbliżeniu się dwóch grafik o nieregularnym kształcie nachodziły na siebie i nie było widać białego prostokątnego tła.

Z góry dziękuje za pomoc.


(floyd) #2

Nie mam vb.net więc nie mogę sprawdzić jak by to było z grafiką w formacie *.gif. Sprawdzałeś?
Jeśli nie, to może spróbuj przekonwertować.


(pocolog) #3

(adan2013) #4

Niestety rozszerzenie .gif nie pomogło, tak samo jak narysowanie grafiki przez zdarzenie Paint.
Obrazki nadal nie mogą na siebie nachodzić.


#5

Czy chodzi o efekt jak w tym filmie ? Jeśli tak to super, a jak nie to daj zdjęcie jaki efekt chcesz osiągnąć, bo nie wiem czy zupełnie dobrze Cię rozumiem.

VB.Net Transparent PictureBox


(adan2013) #6

O prześwitywanie tła formy też mi chodzi ale ważniejsze jest dla mnie zrobienie wielu kontrolek z PictureBoxami które będzie można przeciągać myszką i żeby w miejscach gdzie mam przeźroczystą część grafiki była widoczna grafika z kontrolki która znajduje się pod nią. Więc chodzi mi o przeźroczystość między kontrolką a kontrolką lub między PictureBoxem a PictureBoxem który nie jest jego rodzicem.


#7

Nie wiem, czy da się to jakoś automatycznie. Ja bym wykrywał, na zdarzeniu czy jest drag i na zdarzeniu ruchu myszy, sprawdzał, czy nie jestem pod inną kontrolką. Jak bym był to bym wykonał metodę na niej, gdzie w parametrze przekażę swoją mapę bitową i ta kontrolka na swoim płótnie wyrysuje obcą kontrolkę, ale tylko tam gdzie ‘nie ma przezroczystego’. Kolor poświęcony na przezroczystość koduje się w lewym dolnym pikselu. Oczywiście kontrolki nie są pokładane na stosie, a to co robisz to jedynie “udawanie”, ale efekt osiągniesz.