Przezroczystość (usunięcie kształtu) panelu

0

Witajcie, mam taki problem. Mianowicie, na formie dokonuje dość czasochłonnych operacji rysowania, a na komponencie Panel jest mała animacja kulki (gdybym umieścił tą animację na formie musiałbym ją przerysowywać, co byłoby bardzo nieefektywne)

Za pomocą Timer'a zmieniam położenie tego Panelu na formie ("ruch po linii"). Problem polega na tym, że podczas tego poruszania Panelu widać jego kwadratowy kształt na tle innych komponentów, a nie może tak być, gdyż ma być widać tylko tą okrągłą kulkę.
Próbowałem wieeelu sposobów ale żadan nie rozwiązał tego problemu. Macie może pomysły ?

0

To ja spróbuję..bo ostatnio walczę z takimi małymi animacjami.
Dla sprecyzowania:

Jak rysujesz kulkę? czy może umieszczasz zdjęcie np. *. gif na panel
czy przerysowanie kulki odbywa się często.? (podejrzewam ze tak)

Widać kwadrat..bo to kwadrat panel'u.. moze ustaw jako przeźroczysty panel (transparent)
Animacja po lini hmm .. a jesli zamiast kulki bedziesz miał trójkąt.. i będziesz chciał go obrócić wokół osi np o 30 stopni...Panel raczej nie obrócisz( nie wiem ..nie widzialem).. odpisz na pierwsze pytanie to napisze co ja zrobiłem

0

Ok . ja robiłem coś takiego... robiłem skomplikowana animację elementów mechanicznych pojazdu...
założmy ze było to ramię ładowarki ;).. to ramię składało się w kilku elememtów i każde z nich mogło obracać się o zadany kąt. oczywiscie to nie prostokąty więc te elemety musiały się nakładać na siebie..aby nie byłu to kwadraty z rysunkami... Wiec rysowałęm zdjęcia

Graphics g = Panel1.createGraphics();
g.DrawImage( "plik.gif"  ,x, y);

plik.gif były to pliki gif zrobione przeze mnie aby były transparentne..czyli w skrócie z przeźroczystym tłem.

  1. Połowa sukcesu!!!

wklejając 2 zdjęcia nawet nachodzące na siebie nie zasłaniało tego podspodem (tzn elemnty wiadomo ktorys musial byc nad :)

  1. Obrót: Animacja obrotu i przsunięć opróćz x,y wykorzytałem funckję
 E.Graphics.Transform = matrix;
matrix.RotateAt(180, new PointF(206, 103)); 

ustal;amy o jaki kat ma się zdjęcie (lub inny element podany) obrócić

  1. umnie panel odświeżałem funckajmi Update(); Invalide();
    nie wiem dokladnie ktora z nich mi byla tak naprawde potzrebna..ale wyczytalem ze to pozwala na przerysowanie uchwytu graphics..

  2. CO z tym cholernym miganiem.... faktycznei podczas przerysowania panelu.. strasznie nam miga..
    rozwiązanie polega na ustawieniu DoubleBuffered = true
    .. opisałem w osobnym temacie kilka dni temu :)

0

[edit] rezygnuję z rysowania na formie(bezsensowne w moim przypadku złożonego rysowania), będę wczytywał bitmapy i ew. rysował na nich, zobaczę jeszcze

Gdyby ktoś miał podobny problem - tu http://www.techotopia.com/index.php/Using_Bitmaps_for_Persistent_Graphics_in_C_Sharp jest rozwiązanie, tworzymy bitmapę, dodajemy DoubleBuffered (http://www.csharp-examples.net/set-doublebuffered/) aby nic nam nie migało i już :)

Dzięki za odpowiedzi, ja cały dzień poświęciłem rozwiązywaniu tego problemu i jak na
razie bez rezultatu (sic!)

Animacja piłki jest to animowany plik gif, który wczytuję, a następnie animuję za pomocą klasy ImageAnimator (z MSDN'a). I to wszystko robię na panelu 12x12. Jeśli wczytuję Twoim sposobem:

Graphics g = Panel1.createGraphics();
g.DrawImage( "plik.gif"  ,x, y);

to się nie animuje bo plik .gif wczytuję jako bitmapę

I tak:
wynalazłem w necie, jak przerobic Panel, aby był transparentny. Niby jest, ale:

  • to powoduje że przez animację piłki też wszystko prześwituje co jest pod nią, a tak by nie może

Druga sprawa - cały czas myślę, jak mam rozwiązać problem ponownego przerysowywania tego co jest na formie, gdyż gdy poruszam panelem, to działa on jak gumka na to co już było narysowane ja formie. I tak się zastanawiam czy jest sposób aby przerysowywać "cześć" formy a nie całość ?

0

podaj nr gg albo jakis kontakt to wieczorem ci opisze jak zrobić.. tez mialem takie problemy wiec juz iwem jak zdziałać to

1 użytkowników online, w tym zalogowanych: 0, gości: 1