Eh, ik kan het mis hebben maar deze methode lijkt erg veel op de manier waarop vectoren worden gebruikt in bijvoorbeeld Flash? Of heb ik het mis?
ja flash gebruikt inderdaad dat principe, dat is het mooie, als je daar inzoomt dan zal een circel nooit blokkerig worden

maar flash gebruikt deze functies alleen bij lijnen/vakken/wat dan ook die gegenereerd zijn in flash zelf: importeer maar eens een bitmap in flash en ga die vergroten, dat wordt wel blokkerig (logisch natuurlijk...).
Is het niet mogelijk om een heel groot aantal standaardformules die een vlak beschrijven CENTRAAL op te slaan, op het internet bijvoorbeeld, zodat iedereen er gebruik van kan maken. (tuurlijk, bandbreedte en rekenkracht zijn misschien nog niet toereikend, maar volgens mij is dat pas efficient data opslaan)
Je bedoelt de meest gebruikte functies (welke zijn dat dan? zwarte vlakken, witte letters voor de aftiteling ofzo..?) op internet zetten... Dat is dus de codec die we van voor deze compressiemethode zouden moeten maken voorzien van de meest gebruikte functies naast natuurlijk de codec zelf (het begrijpen van de functies en die kunnen vertalen en omzetten). Uiteraard moet de codec zoveel mogelijk functies bevatten, liefst allemaal (kan duh niet) zodat in de film alleen voor elk frame zoiets hoeft te komen:
code:
1
2
3
4
| Frame 1:
* functie 502, variabele p=3, variabele q=4,5, kleur=groen
* functie 234, variabele p=2,12 variabele q=92, kleur=rood
* functie 121, variabele p=15, variabel q=24, kleur=zwart |
Je kan in de codec de film nog meer verkleinen door van te voren bij elke kleur te kijken hoeveel pixels daarvan zijn, en de kleur met de meeste pixels de standaard kleur te laten zijn (dus een film waarveel bloed in zit, is bijvoorbeeld de kleur rood de meest gebruikte kleur in de film, dus als je alle pixels van elk frame van de film zou sorteren en naast elkaar zou leggen, dan zou rood het meest voorkomen). Dan wordt dit aan het begin van de code die de film beschrijft opgeschreven:
Dan hoef je bij het coderen elke pixel die rood is, niet in een functie te stoppen, die kun je dan weglaten. Als voor een frame, waarin rood voorkomt, alle functies zijn uitgevoerd, dan zijn alle kleuren die in dat frame voorkomen dus op de juiste plek geplaatst, maar een aantal coordinaten hebben nog een gekleurde pixel toegewezen gekregen, die worden dan roodgekleurd, omdat de standaardkleur rood is. Dat scheelt ook weer heel veel functies. (Als je me niet begrijpt, snap ik, zeg het maar dan zal ik het beter uit proberen te leggen...)
Ik zie niet in waarom een willekeurige functie iets anders gaat zijn dan een lijst van coordinaten.
Omdat een willekeurige functie, die meerdere coordinaten bevat kleiner is dan al die coordinaten een voor een opschrijven.
Dit lijkt mij toch duidelijk: als je een bitmap van 400*400 neemt, en die vul je volledig met wit, dan slaat de bitmap dit op als:
code:
1
2
3
4
5
6
7
8
9
| size=400*400
(0,0)=wit
(0,1)=wit
(0,2)=wit
[...]
(399,397)=wit
(399,398)=wit
(399,399)=wit
END |
400*400=1600000 keer zeggen dat een bepaalde pixel wit is...
En de hier besproken methode (ik noem het voor het gemak even: CBM (compact bitmap) en waarom dat zal ik zo uitleggen) schrijft dit als volgt:
code:
1
2
3
| size=400*400
standardcolor=wit
end |
Stel er loopt een verticale zwarte lijn in het midden:
code:
1
2
3
4
| size=400*400
standardcolor=wit
line (200,0)(200,200) black
end |
Dit is natuurlijk uitgebreid opgeschreven, in de code zou het dan veel korter staan.
Ok, wat we nu hebben is dus precies die bitmap, geen pixel die anders is geplaatst, maar wel veel kleiner, i.p.v. 160000 regels met kleurtoekenning, twee regels kleurentoekenning en nog twee regels als begin en eindkenmerk, vandaar: CBM: Compact BitMap (zo kunnen we er makkelijker over praten

)
Ik heb een witte bitmap van 400*400 in 24bit opgeslagen: 468kb = 468000 tekens in dit bestand. Dezelfde bitmap opgeslagen in jpg wordt 3,05kb=3050 tekens; veel minder maar nog steeds veel.
Nu in CBM, zoals uiteindelijk opgeslagen:
uitleg: 400 geeft het aantal pixels breedte aan, ~ geeft aan dat de lengte idem is (bij 400*399 wordt het: 400*399; achter * komt dus nog een getal, ~ zegt op zich al genoeg)
FFFFFF staat voor #FFFFFF, wie wel eens grafisch doet, weet dit: de standaard voor kleurbeschrijving, dit is dus wit. De # kan weggehaald worden, die veranderd namelijk nooit.
Tenslotte staat de ! voor het einde van de code.
Sla de code op in een tekstbestandje, en waar kom je op uit? Exactement: 13bytes! Dan heb je dus exact wat de bitmap is, een compressiefactor van 468000/13=36.000!!! En ten opzichte van jpg: 3050/13= 234 (de compressie factor is dus het aantal maal kleiner, dit is uiteraard de grootste compressie factor die je kunt krijgen, omdat een wit vlak het beste te comprimeren is met CBM, maar bedenk eens, als was de compressiefactor in een film maar de helft, hoeveel kleiner wordt een film dan wel niet!
Okee, als dit zo is, was dit al eerder ontdekt, waar zit mijn fout..?