Avatar billede davidfossil Nybegynder
23. juni 2006 - 12:21 Der er 5 kommentarer og
1 løsning

"Optimal" ColorPalette for bestemt System.Drawing.Image

Nogen der kender en løsning (i frameworket eller som open source) der generere en optimal ColorPalette for et givent billede, med et givent antal pladser?

Funktionaliteten jeg ønsker, svarer til den man ser i Gimp (og andre billedbehandlingsprogrammer) hvor en billede kan indekseres til et antal farver som brugeren bestemmer. Programmet udregner herefter hvilke farver paletten skal bestå af. Jeg har brug for at kunne tage et objekt af klassen System.Drawing.Image, kalde metoden "SetOptimalPalette(Image, int)" og herfter gemme billedet som PNG på normal vis.

Så vidt jeg kan se burde det være muligt - men er der nogensinde nogen der har implementeret logikken i .NET?
Avatar billede tedar Nybegynder
26. juni 2006 - 22:50 #1
Jeg har lidt svært ved at se hvad det er du gerne vil have, mener du at du selv skal kunne ændre antallet af farver? har du allerede den optimale pallette allerede. Prøv at omformulere spørgsmålet.

/tedar
Avatar billede davidfossil Nybegynder
27. juni 2006 - 14:57 #2
Jeg har et billede som et objekt af System.Drawing.Image klassen. Dette billede benytter (AFAIK) en fuld RGB farveskala. Billedet skal gemmes som PNG, men det fylder frygteligt meget. Derfor ønsker jeg at ændre farvepaletten for billedet, så det fx kun indeholder 32 forskellige farver. De fleste billedbehandlingsprogrammer har denne mulighed for at "indeksere" et billede til et givent antal farver. Jeg har ikke på forhånd en liste over hvilke farver billedet må indeholde, hvorfor jeg har brug for en metode der kan generere den optimale farvepalette ud fra billedets indhold. Dette sker ligeledes automatisk i de billedbehandlingsprogrammer jeg har arbejdet med. Det jeg søger er således en metode der for et givent objekt af klassen System.Drawing.Image kan sammensætte en optimal farvepalette til et givent antal farver.

Som sagt er dette en triviel handling i diverse billedbehandlingsprogrammer, men nu har jeg brug for at gøre det programmatisk. Spørgsmålet er om funktionaliteten eksisterer i .NET Framework 1.1, eller om nogen skulle have kendskab til et (helst open source) library der kan klare opgaven.

Håber at det hjalp :)
Avatar billede tedar Nybegynder
27. juni 2006 - 20:07 #3
Jeg har desværre kun lavet den slags i PHP ved hjælp af Imagemagick - og der findes, så vidt jeg ved, desværre ikke en c# component af det.

Men, jeg har kigget lidt omkring, og jeg er ret sikker på at din løsning findes her http://msdn.microsoft.com/library/en-us/dnaspp/html/colorquant.asp
Avatar billede davidfossil Nybegynder
28. juni 2006 - 14:24 #4
Yes - det ser ud til at være det rigtige. Det var vist bare ordet "quantize" jeg manglede. Det eneste kritikpunkt jeg måtte have er at koden er unsafe, men som artiklen beskriver er det nok nødvendigt pga. performancehensyn.

Tak for linket - smid et svar =]
Avatar billede tedar Nybegynder
28. juni 2006 - 14:57 #5
Det er hermed gjort:

http://msdn.microsoft.com/library/en-us/dnaspp/html/colorquant.asp

Der burde være nok information at hente :)
Avatar billede tedar Nybegynder
29. juni 2006 - 18:18 #6
http://www.codersource.net/codersource_dot_net.html der ligger en hel del artikler om image processing - tænkte at det måske ville være interessant
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester