Ik ben bezig met een ontwerp, en daarbij wil ik gebruik gaan maken van Java2D. Ik loop tegen het volgende probleem aan.
Ik heb zeg maar een grote BufferedImage of Raster (source). Hieruit wil ik een Stuk halen en op een andere BufferedImage of Raster (destination) zetten. De source is een bv een kaart van de wereld. De destination kan de hele kaart zijn, maar kan ook alleen een paar landen zijn. Daarnaast moet de destination ook gedraaid kunnen zijn.
In eerste instantie dacht ik aan een AffineTransformation, omdat het stukje geschaald en gedraaid moet worden, maar voorzover ik nu heb kunnen vinden werkt dit alleen over het hele source beeld. Dat is nogal lastig en inefficient als je ver ingezoomd bent. Daarnaast is de destination niet rechthoekig, maar zeshoekig.
Ik kan natuurlijk gewoon de transformatie gaan doen, en vervolgens de hoeken weer weghalen (zodat ik uiteindelijk wel een zeshoek krijg), maar d'r moet vast wel een andere manier zijn.
Ik kan natuurlijk ook zelf de transformatie gaan schrijven. Het nadeel daarvan is dat ik dan ook zelf een bilineair interpolatie algoritme er in moet gaan zetten.
Is er met een AffineTransformation niet een methode om niet in 1 keer de hele image te transformeren, maar om per pixelpositie op de destination een sample (mbv bilineaire interpolatie) uit de source te nemen. Als die methode er is ben ik van een heleboel problemen af. Dan kan ik namelijk mijn orginele id gebruiken. Hierbij bestond de source eigenlijk uit 3 grijswaarde beelden. Elk van deze grijswaarde stelde dan een HSV component voor. Door dan uit alle 3 een sample te nemen zou ik dan een pixel in de destination kunnen maken. Daarnaast zou ik dan ook allen de 'veranderde' gedeeltes kunnen updaten (Zolang de transformatie natuurlijk niet veranderd is).
Nog ff een plaatje voor de duidelijkheid:
Ik heb zeg maar een grote BufferedImage of Raster (source). Hieruit wil ik een Stuk halen en op een andere BufferedImage of Raster (destination) zetten. De source is een bv een kaart van de wereld. De destination kan de hele kaart zijn, maar kan ook alleen een paar landen zijn. Daarnaast moet de destination ook gedraaid kunnen zijn.
In eerste instantie dacht ik aan een AffineTransformation, omdat het stukje geschaald en gedraaid moet worden, maar voorzover ik nu heb kunnen vinden werkt dit alleen over het hele source beeld. Dat is nogal lastig en inefficient als je ver ingezoomd bent. Daarnaast is de destination niet rechthoekig, maar zeshoekig.
Ik kan natuurlijk gewoon de transformatie gaan doen, en vervolgens de hoeken weer weghalen (zodat ik uiteindelijk wel een zeshoek krijg), maar d'r moet vast wel een andere manier zijn.
Ik kan natuurlijk ook zelf de transformatie gaan schrijven. Het nadeel daarvan is dat ik dan ook zelf een bilineair interpolatie algoritme er in moet gaan zetten.
Is er met een AffineTransformation niet een methode om niet in 1 keer de hele image te transformeren, maar om per pixelpositie op de destination een sample (mbv bilineaire interpolatie) uit de source te nemen. Als die methode er is ben ik van een heleboel problemen af. Dan kan ik namelijk mijn orginele id gebruiken. Hierbij bestond de source eigenlijk uit 3 grijswaarde beelden. Elk van deze grijswaarde stelde dan een HSV component voor. Door dan uit alle 3 een sample te nemen zou ik dan een pixel in de destination kunnen maken. Daarnaast zou ik dan ook allen de 'veranderde' gedeeltes kunnen updaten (Zolang de transformatie natuurlijk niet veranderd is).
Nog ff een plaatje voor de duidelijkheid:
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'