Grafische gegevensklassen gebruiken

Flash Player 10 of hoger, Adobe AIR 1.5 of hoger

De API-uitbreiding voor tekenen bevat een set met klassen in het flash.display-pakket die de IGraphicsData-interface implementeren. Deze klassen fungeren als waardeobjecten (gegevenscontainers) die de tekenmethoden van de teken-API vertegenwoordigen.

Met deze klassen kunt u een volledige tekening opslaan in een Vector-object van het type IGraphicsData (Vector.<IGraphicsData>). U kunt de grafische gegevens opnieuw gebruiken als de gegevensbron voor andere vorminstanties of om tekeninformatie op te slaan voor later gebruik.

U ziet dat er meerdere vulklassen voor elke vulstijl zijn, maar slechts één streekklasse. ActionScript heeft maar één IGraphicsData-streekklasse omdat de streekklasse de vulklassen gebruikt om de stijl ervan te definiëren. Elke streek wordt in feite dus gedefinieerd door een combinatie van de streekklasse en een vulklasse. De API's voor deze afbeeldingsgegevensklassen spiegelen overigens de methoden die ze in de klasse flash.display.Graphics vertegenwoordigen:

Graphics-methode

Overeenstemmende klasse

beginBitmapFill()

GraphicsBitmapFill

beginFill()

GraphicsSolidFill

beginGradientFill()

GraphicsGradientFill

beginShaderFill()

GraphicsShaderFill

lineBitmapStyle()

GraphicsStroke + GraphicsBitmapFill

lineGradientStyle()

GraphicsStroke + GraphicsGradientFill

lineShaderStyle()

GraphicsStroke + GraphicsShaderFill

lineStyle()

GraphicsStroke + GraphicsSolidFill

moveTo()

lineTo()

curveTo()

drawPath()

GraphicsPath

drawTriangles()

GraphicsTrianglePath

Daarnaast heeft de klasse GraphicsPath zijn eigen hulpprogrammamethoden GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo() en GraphicsPath.wideMoveTo(), zodat deze opdrachten op eenvoudige wijze voor een GraphicsPath-instantie kunnen worden gedefinieerd. Deze hulpprogrammamethoden vereenvoudigen het rechtstreeks definiëren en bijwerken van de opdrachten en gegevenswaarden.

Tekenen met gegevens van vectorafbeeldingen

Wanneer u een verzameling IGraphicsData-instanties hebt, gebruikt u de drawGraphicsData()-methode van de Graphics-klasse om de afbeeldingen te renderen. De drawGraphicsData()-methode voert een set met tekeninstructies in sequentiële volgorde uit vanaf een vector van IGraphicsData-instanties:

// stroke object 
var stroke:GraphicsStroke = new GraphicsStroke(3); 
stroke.joints = JointStyle.MITER; 
stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke 
 
// fill object 
var fill:GraphicsGradientFill = new GraphicsGradientFill(); 
fill.colors = [0x0000FF, 0xEEFFEE]; 
fill.matrix = new Matrix(); 
fill.matrix.createGradientBox(70, 70, Math.PI/2); 
// path object 
var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); 
path.commands.push(GraphicsPathCommand.MOVE_TO, GraphicsPathCommand.LINE_TO, GraphicsPathCommand.LINE_TO); 
path.data.push(125,0, 50,100, 175,0); 
 
// combine objects for complete drawing 
var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); 
drawing.push(stroke, fill, path); 
 
// draw the drawing 
graphics.drawGraphicsData(drawing);

Door één waarde te wijzigen in het pad dat door de tekening in het voorbeeld wordt gebruikt, kan de vorm meerdere keren opnieuw worden getekend om een complexere afbeelding te verkrijgen:

// draw the drawing multiple times 
// change one value to modify each variation 
graphics.drawGraphicsData(drawing); 
path.data[2] += 200; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 150; 
graphics.drawGraphicsData(drawing); 
path.data[2] += 100; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 50;graphicsS.drawGraphicsData(drawing);

Ondanks het feit dat IGraphicsData-objecten vul- en streekstijlen kunnen definiëren, zijn de vul- en streekstijlen geen vereiste. Met andere woorden, methoden van de klasse Graphics kunnen worden gebruikt om stijlen in te stellen, terwijl IGraphicsData-objecten kunnen worden gebruikt om een opgeslagen verzameling paden te tekenen, of omgekeerd.

Opmerking: Gebruik de methode Graphics.clear() om een vorige tekening te wissen voordat u een nieuwe maakt, tenzij u de oorspronkelijke tekening wilt uitbreiden, zoals in het voorbeeld hierboven. Terwijl u één gedeelte van een pad of verzameling van IGraphicsData-objecten wijzigt, kunt u de hele tekening opnieuw tekenen om de wijzigingen te zien.

Wanneer u grafische gegevensklassen gebruikt, wordt de vulling gerenderd wanneer drie of meer punten worden getekend, aangezien de vorm zich inherent op dat punt sluit. De vulling wordt gesloten, maar de streek niet. Dit gedrag is anders wanneer meerdere Graphics.lineTo()- of Graphics.moveTo()-opdrachten worden gebruikt.

Gegevens van vectorafbeeldingen lezen

Naast het tekenen van vectorinhoud naar een weergaveobject kunt u in Flash Player 11.6 en Adobe AIR 3.6 en later de readGraphicsData()-methode van de Graphics-klasse gebruiken om een gegevensrepresentatie te verkrijgen van de inhoud van de vectorafbeeldingen van een weergaveobject. Deze kan worden gebruiken om een momentopname van een afbeelding te maken om een sprite-werkblad bij uitvoering op te slaan, te kopiëren, te maken en meer.

Door de readGraphicsData()-methode aan te roepen, wordt een Vector-instantie geretourneerd die IGraphicsData-objecten bevat. Dit zijn dezelfde objecten die worden gebruikt om vectorafbeeldingen te tekenen met de drawGraphicsData()-methode.

Er zijn verschillende beperkingen voor het lezen van vectorafbeeldingen met de readGraphicsData()-methode. Zie de readGraphicsData()-vermelding in de Naslaggids voor ActionScript.