Pomóż mi z kanałem alfa w HDC. Robię HDC dc throw CreateCompatibleDC. Następnie wywołaj funkcję CreateDIBSection i znajdź bajty obrazu w pamięci. Następnie wywołaj DrawFrameControl do tego dc. Wszystkie prace, ale w pamięci są 4 bajty na piksel i kanał alfa wypełnia się o 00. Nawet jeśli wcześniej były FF. Ale potrzebuję kanału alfa. W jaki sposób ustawić DrawFrameControl na prawdziwe wartości alfa lub po prostu ich nie dotykać. Dziękuję Ci. I przepraszam za zły angielski :(Kanał alfa w DeviceContext (HDC)
Odpowiedz
Nie można sprawić, by GDI nie zapisywał się do alfa/bajtu zarezerwowanego w bitmapie czterobajtowym na piksel. GDI nie jest tak naprawdę alfa świadomy, z wyjątkiem pary z funkcjami takimi jak AlphaBlend
. można jednak wykorzystać wiedzę, że pisze go i resetuje alfa 0 wiedzieć, które piksele to pisał do i ręcznie naprawić alfa później.
aby uzyskać więcej informacji, przeczytaj te trzy artykuły:
- Transparent Graphics with GDI, Part 1
- Transparent Graphics with GDI, Part 1 1/2
- Transparent Graphics with GDI, Part 2
pierwszych dwóch prawdopodobnie daje wystarczająco dużo informacji, aby osiągnąć to, co chcesz.
Artykuły te stosują ogólne podejście do obsługi alfy z funkcjami GDI, skanując piksele, w których alfa została zbita i naprawia (i przechodzi do bardziej zaawansowanych technik rysowania kilku rzeczy jeden na drugim, z poprawną alfą.) FrameRect
rysuje prostokąt, w którym linie mają szerokość jednej jednostki i są wysokie. Możesz wydajniej rysować za pomocą linii, a nawet bezpośrednio edytować bitmapę pikselową w pamięci, aby narysować proste linie w pamięci. Dzięki temu nie trzeba przeskanować całej mapy bitowej dla pikseli narysowanych za pomocą GDI - w końcu, ponieważ jest to prostokąt z szerokimi krawędziami jednego urządzenia, wiesz dokładnie, które piksele będą już rysowane i możesz je edytować samodzielnie.
- 1. Jak zmienić kanał alfa istniejącego koloru tła?
- 2. Dodaj kanał alfa do danego koloru
- 3. kanał alfa w ggplot2 nie działa po zainstalowaniu 2.15
- 4. Jak renderować przezroczysty kursor na bitmapę zachowując kanał alfa?
- 5. Dodaj kanał alfa do koloru tła za pomocą jQuery/JavaScript
- 6. wybierz kanał <- <- kanał
- 7. ImageIO ignoruje kanał PNG alpha
- 8. Edytować tylko warstwę alfa w GIMP
- 9. Ustal, czy Alpha kanał jest używany w obrazie
- 10. widok z niską alfa - podrzędny wysokiej alfa
- 11. Otwórz kanał telegramów w Androidzie
- 12. Natywny odtwarzacz wideo w formacie Android z kanałem alfa
- 13. Spark MLlib - Collaborative Filtering niejawny Kanał
- 14. Zmienne mieszanie alfa w raplab
- 15. alfa-numeryczne w SQL Server
- 16. Co robi kanał ChannelOption.SO_BACKLOG?
- 17. Subskrybuj kanał RSS
- 18. Czy istnieje kanał identyfikacyjny?
- 19. Błąd C2360: Inicjalizacja "hdc" jest pomijana przez etykietę "case".
- 20. Odrzucanie kanału alfa z obrazów zapisanych jako tablice Numpy
- 21. Lewy prawy kanał Android
- 22. Co zamyka kanał kotlinx.coroutines?
- 23. Układ Android alfa
- 24. Co to jest czwarty kanał w Bgr32 PixelFormat
- 25. javascript - zmiana alfa obrazu
- 26. Jak malować alfa?
- 27. glColor4f() - efekt wartości alfa
- 28. płótno jasne, z alfa
- 29. Dostosuj alfa UIColor
- 30. Alfa-beta move ordering