Archief - [PROG] Verkleinen/Vergroten Bitmap (code)

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Mopster

Legacy Member
Ik moet voor mijn examen een klein programma schrijven in Euler. De bedoeling is dat ik een logo plaats op een foto. Dit lukt mij zonder problemen met tranparantie.

Zoals de meeste wel weten bestaat een bitmap uit 3 matrixes: R, G en B, waarin de kleurwaarde voor elke pixel staat.

Het probleem is dat ik het logo wil verkleinen/vergroten, ik zoek dus een algortime om dit gedaan te krijgen.

Ik heb me al op internet zot gezocht, mij zo ambetant als wa gemaakt en ik krijg het maar niet voor elkaar. Ik heb al gekeken naar Bilineaire filtering en Bicubic nogiets.

Het programma Euler werkt met code dat lijkt op pseudocode. Zou iemand mij kunnen helpen met een algortime voor een bitmap te verkleinen/vergroten. Ben niet goed in wiskunde, laat staat in beeldverwerking.

Hoop dat dit het juiste forum is, of het moet bij programmeren staan :) tis zo een beetje van beiden.

QplQyer

Legacy Member
Neem vier pixels, bereken het gemiddelde van hun kleurwaarden -> dat is de kleurwaarde van de nieuwe pixel.
Zo kan je al 4x verkleinen bv.

Het resultaat ziet er misschien niet zo super uit, maar het is een mogelijke methode.

Vich

Legacy Member
Een mogelijke optie - vast niet de beste - is als volgt:

Stel dat je een bitmap van 4x5 wil herschalen naar 8x10:

Beschouw punt (1,1) in de 8x10 bitmap:
(1,1) is 1/8 op de X-as en 1/10 op de Y-as van deze bitmap. Dit punt stelt 12,5% vordering voor op de X-as en 10% vordering op de Y-as op die bitmap.
Beschouw deze procenten en reken deze om naar coordinaten op de 4x5 afbeelding. Je krijgt dus punt (1,1) op de originele bitmap.

Of concreter:
Je gaat dus telkens de coordinaten van de resultaat-afbeelding nemen, kijken hoeveel procent dit is tov de grootte van die afbeelding en dan die percentage terug omrekenen naar de coordinaten op de originele afbeelding. Als deze laatste stap niet exact op een punt in die eerst bitmap valt, dan kan je een blend doen tussen de 2 punten waar hij tussenin zit(en dit ga je bijna bij alle punten zo moeten doen).
Het percentage zegt ook waar hij precies tussen die twee punten in zit, zodat je dus bij het blenden de ene kleur meer kan laten meetellen dan de andere.

QplQyer zei:
Neem vier pixels, bereken het gemiddelde van hun kleurwaarden -> dat is de kleurwaarde van de nieuwe pixel.
Zo kan je al 4x verkleinen bv.

Het resultaat ziet er misschien niet zo super uit, maar het is een mogelijke methode.
Maar dat is enkel mogelijk wanneer je verkleint of vergroot met gehele stappen die een macht zijn van 2.
Als je 4x wil verkleinen moet je een gemiddelde nemen van een grid van 4x4 punten (als je het cubisch wil verkleinen). Als je het 2x wil verkleinen, dan moet je een grid van 2x2 punten nemen en daar het gemiddelde van nemen.

QplQyer

Legacy Member
Vich zei:
Maar dat is enkel mogelijk wanneer je verkleint of vergroot met gehele stappen die een macht zijn van 2.
Als je 4x wil verkleinen moet je een gemiddelde nemen van een grid van 4x4 punten (als je het cubisch wil verkleinen). Als je het 2x wil verkleinen, dan moet je een grid van 2x2 punten nemen en daar het gemiddelde van nemen.
Het was dan ook een nogal snel verzonnen methode, met alle gebreken (en onjuistheden in mijn tekst inderdaad), eigenlijk wilde ik gewoon het idee van pixels samennemen en het gemiddelde ervan nemen schetsen.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan