No wlasnie... jak przekonwertowac bitmape na 256 kolorów?
Z góry dzieki.
Pozdrowienia.
BigLama ([email protected] , http://biglama.w.interia.pl )
No wlasnie... jak przekonwertowac bitmape na 256 kolorów?
Z góry dzieki.
Pozdrowienia.
BigLama ([email protected] , http://biglama.w.interia.pl )
Mozesz to zrobic w zwykłem Paincie (nie polecam) albo za pomaca takich programow jak Paint Shop Pro itp.
ale chodzi mi o sposób programowy (przy pomocy jakiejs procedurki w delphi).
BigLama napisał:
>ale chodzi mi o sposób programowy (przy pomocy jakiejs procedurki w delphi).
>
Jeżeli chodzi Ci o sposób programowy w delphi to przeczytaj FAQ forum, zobaczyłbyś, że dobrym zwyczajem jest umieszczanie o jaki program chodzi np. [Delphi].
Zaś jeśli chodzi o rozwiązanie problemu konwersji poczytaj Windows SDK w dziale grafika. Tam przy kolorach i paletach jest coś o konwersji i dobieraniu najbardziej zbliżonego koloru.
(chyba pójdę w ślady pq u zmienię stopkę na taką jak jego: Po pierwsze naciśnij F1 :D )--Jest jeszcze jeden błąd ... :)
poszukaj gdzies w kodach przykladowych dolaczonych do delphi
tam powinno byc cos takiego---=-=[ Delphi 3, 6 ]=-=-
-=-=-==[ LKS ]==-=-=-
-=[ [email protected] ]=-
LKS napisał:
poszukaj gdzies w kodach przykladowych dolaczonych do delphi
>tam powinno byc cos takiego
U mnie nie ma ;(
Mam Delphi5 Standard ;( ;( ;(
:-) Po prostu Delphi jest głupi na takie rzeczy musisz zmienić język.
Dobra żartowałem. Powiem za to jak to zrobić w pascalu, ale nie będzie ciekawie.
Plik BMP składa się z pierwszych 53 znaczków które oznaczają rozmiar, typ pliku
ilość kolorów itp. W następnych 2563 znaczkach masz podaną paletę obrazka.
Cały problem będzie polegał na znalezieniu 256 najlepszych kolorów. Sprawdzasz w delphi po pixelu jakie mają kolory i wyznaczasz 256 najpotrzebniejszych.
Potem tylko w yx znaczkach ustalasz jaki pixel to jaki kolor w palecie 256 i zapisujesz wszystko do BMP.
Jeżeli chcesz przekonwertować bitmapę na 256 używając palety systemowej to musisz użyć funkcji:
NumerKoloruWPalecieSystemowej:=GetNearestColor(UchwytUrządzenia {np. ekranu} ,KolorDoPrzekonwertowania);
i dla każdego punktu to wykonać. :( Potem tylko przekopiować to do bitmapy z paletą sytemową.
Jeżeli natomiast chcesz użyć innej palety niż systemowej to musisz użyć funkcji:
GetNearestPaletteIndex(UchwytPalety,Palety);
Jeżeli chcesz dokładnie dopasować paletę, to nie ma wyjścia ale musisz tak jak Tp wskazał zrobić histogram (tzn. przelecieć wszystkie piksele i sprawdzić które kolory występują najczęściej, ewentualnie przyporządkować im jakieś wagi i użyć dithering'u)
Problem naprawdę dobrej konwersji jest skomplikowany. Zobacz np. ile sposobów dopasowania palety wynikowej jest w Corel Photo-Paint albo w innych profesjonalnych programach.
Życzę owocnej pracy nad opracowywaniem metody konwersji
--Jest jeszcze jeden błąd ... :)