[C++/WinApi] StretchBlt i SetStretchBltMode(hdc,HALFTONE);

0

witam,
najpierw co chce osiagnac: chce narysowac zmniejszoną bitmape zachowujac w miare dobra jakosc,
(przewaznie rozmiar bitmap to 32x32- ikony) fragmenty bitmapy maja być transparentne - mam maske,
ps: nie chec tez uzywac pamieciozernego (myle się ?) kombajnu gdi+ do rysowania kilku pierdólek

jak kazdy wie wszystkie funkcje skalujace bitmape i ryusjace ja daja kiepska jakosc koncowa obrazu

sprawa ma sie troche inaczej jezeli ustawimy SetStretchBltMode(hdc,HALFTONE);
wtedy jakosc jak przyzwoita, ale działa to tylko z operacja SRCCOPY

dla porownania ikona gorna pomniejszona z 32x32 do 24x24 narysowana bez tla, kiepski efekt (SRCAND i SRCPAINT)
ikona dolna calkiem fajna, ale niestety jest tlo (wiadomo SRCCOPY)
user image

mecze sie z tym caly dzien, czy jakas dobra dusza podsunie pomysl jak narysowac bitmape bez tla wczesniej robiac SRCCOPY. inne rozwiazanie to przeskalowac bitmape jakis algorytmem bicubic albo bilinear, efekt bedzie dobry, na razie znalazlem wersje tych algortymow dla Graphics::TBitmap z borlanda, ale nie szukalem jeszcze jak zrobic scanline(lub jego odpowiednika) na HBITMAP, jezeli ktos posiada juz gotowe implementacje tych algorytmow operujacych na hbitmap byloby miodnie
cos czuje ze problem moze byc banalny, typu narysuj na tym hdc , spokiuj z tamtego , zrob blt i jest

0

A próbowałeś TransparentBlt w trybie HALFTONE?
Jeśli tło pod obrazkiem jest jednolite to wypełnij przezroczyste piksele kolorem tła i tak zmodyfikowaną bitmapę już bez przezroczystości namaluj funkcją StretchBlt w trybie HALFTONE, to na pewno zadziała.
W przeciwnym wypadku pokombinuj z AlphaBlend.

0

1 tlo nie bedzie jednorodne, wiec wypelnienie jednym kolorem odpada
2 transparentblt nie dziala (mi) z halftone mimo ze help mowi ze uzywa setstretchbltmode gdy resize'ujemy, poza tym nie bedzie on zbyt przydatny bo usuwa podany kolor, ktory akurat moze byc w bitmapie, oczywiscie malo prawdopodobne aby bitmapa(ikona) zawierala skrajne kolor jak np. RGB(255,0,255) wiec jeszcze nie mowie nie :P
3 alphablend zawsze miksuje kolory bitmapy z tlem
4 ze skalowaniem z halftone sobie mniej wiecej poradzilem - zrobilem stretchblt z halftone i skopiowalem zawartosc tego hdc do bitmapy, niestety maska nie wyglada juz tak pieknie , w ww. przypadku nie jest to idealny okrag

0

dobra nie bede sie meczyl tyle z takim badziewiem, uzylem gdi+ , efekt bardzo dobry

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