Strona 1 z 1

Poprawa szybkości vi wklejającego bitmapę na bitmapie.

: 27 wrz 2011 08:59
autor: AGF
W załączniku umieściłem vi z tematu. Ma ona za zadanie zastąpić część bitmapy tła inną bitmapą. Niestety vi dosyć długo się wykonuje dla obrazu tła:1500x1500 pikseli i wklejaniu obrazka 20x20 pikseli to 400 ms (co prawda pracuje na starym (2-3 lata) komputerze :D). Więc pytam:
1. Czy może można poprawić szybkość wykonywania tego vi?
2. Generalnie chodzi o efekt umieszczenia grafiki na innej grafice więc może da się to zrobić (np: korzystając z warstw rysowani, jeżeli takie coś istnieje)

Dodaje że chciałbym to osiągnąć korzystając z LV 2010 PDS raczej bez dodatkowych narzędzi.

P.S. Dodałem jeszcze drugą wersje szybszą o jakieś 10% (ala nadal zbyt wolną)

Re: Poprawa szybkości vi wklejającego bitmapę na bitmapie.

: 27 wrz 2011 15:37
autor: smiga
Zacznijmy od tego: bawisz się sporymi tablicami - skorzystaj z In Place Element Structure.

Re: Poprawa szybkości vi wklejającego bitmapę na bitmapie.

: 27 wrz 2011 20:29
autor: AGF
Dzięki za trafną uwaga smiga, a już traciłem wiarę w LV i chciałem się przesiąść na VC#.
Oczywiście coś robiłem od rana, więc w związku z ty okazało się że lwią część pracy dla mojego vi zapewniają operację "flatten pixmap.vi" i "unflatten pixmap.vi". Tak wiec gdzie tylko się da tam je usunąłem tak aby pracować na samej tablicy RGB. Oczywiście pozostaje jeszcze wyrysowanie tablicy RGB w kontrolce "picture" co za sprawą "draw unflatten pixmap.vi" też zajmuje sporo czasu.
Jak widzę oryginalne bloczki LV manipulują na samej kontrolce "picture" i dobrze (szybko) im to wychodzi, może by słusznie było wiec podążać taką samą drogą...ciekawe czy to możliwe w rozsądnym czasie...sprawdzę.

Oczywiście vi z tematu wątku jest częścią większej aplikacji gdzie są prezentowane wyniki jego ciężkiej pracy.

Pozdrawiam
Andrzej

Re: Poprawa szybkości vi wklejającego bitmapę na bitmapie.

: 28 wrz 2011 11:55
autor: AGF
Trochę pokombinowałem i uzyskałem vi wklejając bitmapę z wykorzystaniem „In place ement modyfi”. Działa on z zadawalającą wydajnością. Jak wcześniej jednak napisałem najwięcej czas zajmuje „przeładowanie” obrazu do kontrolki „picture”.
Tak więc zrezygnowałem z operacji bezpośrednio na bitmapie tła (potencjalnie dużej np: 1000x100 pixeli). Teraz rysuje w kontrolce „picture” piksel za pomocą „Draw Point.vi” i działa to całkiem nieźle.
Rozwiązanie to jest w moim odczuci łopatologiczne, chętnie zrobił bym to lepiej, ale nie wiem i nie mam czasu zgłębić tajemnicy działania kontrolki „picture” (czy jest to udokumentowane? A może po prostu się nie da.)
Jedyny poważnym mankament tego rozwiązania to taki że gdy zrobi się zoom większy od 100% kontrolki „picture” to pomiędzy pikselami wklejonego obrazka powstaje widoczna linia siatki (mimo że pen jest ustawiony na size=1 style=solid).

Zapraszam wszystkich chętnych do krytyki...