Bygge grafikk med Cocoa Programming

January 3  by Eliza

Å gjøre noen form for grafikk programmering i Cocoa, bli kjent med noen viktige Kakao datastrukturer: NSPoint, NSRect, NSSize, og NSColor. Du trenger dem slik at de gjør et godt utgangspunkt.

Poeng

Kakao bruker poeng til å utpeke posisjon på et kvadratisk rutenett. Å arbeide med poeng i Cocoa, bruker du en NSPoint struktur. NSPoint er en struktur sammensatt av to flottører (kalt x og y, henholdsvis). Kakao grafikk definerer nederste venstre hjørne som opprinnelsen (0,0). X-verdien øker når du flytter til høyre. Y-verdien øker når du avansere opp. Dette er en annen ordning enn de fleste Macintosh og Window programmering, der opprinnelsen er i øverste venstre hjørne.

typedef struct _NSPoint {
flyte x;
flyte y;
} NSPoint;

X- og y del av strukturen er koordinatene til det punktet at du ønsker å representere. For å bruke en NSPoint variabel, må du først definere det:

NSPoint påsak;

Deretter å tildele verdier til x og y medlemmer av en NSPoint struktur, bruker du den NSMakePoint funksjon. Dette eksempel gir en NSPoint på det sted (100100):

påsak = NSMakePoint (100, 100);

Rects og størrelser

Nært knyttet til den NSPoint struktur er NSRect struktur. En NSRect (Rect er kort for rektangel) er en konstruksjon som består av en NSPoint og en NSSize:

typedef struct _NSRect {
NSPoint opprinnelse;
NSSize størrelse;
} NSRect;

For å forstå hva dette betyr, må du også vite om NSSize struktur:

typedef struct _NSSize {
flyte bredde;
flyte høyde;
} NSSize;

Det er således et virkelig NSRect en struktur av fire flyte verdier: to for NSPoint og to for NSSize. Den NSPoint delen beskriver hvor NSRect begynner og NSSize variabel beskriver målene på NSRect. For Mac-programmerere som er ny på Cocoa, kan dette ta litt tid å venne seg til fordi Rect struktur som brukes i QuickDraws skiller subtilt fra NSRect struktur. (A Rect består av to punkter.)

Å skape en NSRect, først erklære NSRect variabel:

NSRect theRect;

Deretter initial at løst med NSMakeRect funksjon. NSMakeRect tar fire parametre: x, y, bredde og høyde. For eksempel, skaper denne linjen med kode en NSRect med en opprinnelse på (100100) og dimensjoner på 50 x 50:

theRect = NSMakeRect (100, 100, 50, 50);

Senere, hvis du ønsker å finne opprinnelsen eller størrelsen på theRect, bruker kode som dette:

flyte theOriginX, theOriginY;
flyte theSizeW, theSizeH;
theOriginX = theRect.origin.x;
theOriginY = theRect.origin.y;
theSizeW = theRect.size.width;
theSizeH = theRect.size.height;

Farger

Kakao er AppKit inkluderer NSColor datatype for å hjelpe deg å arbeide med farger i grafikkprosjekter. Den enkleste måten å opprette og definere en NSColor objekt er å bruke en av de innebygde fargeforhånds komponenter. Du vil kjenne igjen umiddelbart hva hver og en skaper, fordi de har vanlig engelsk navn.

For eksempel vil opprette en NSColor objekt som lagrer fargen svart, bruk kode som dette:

// Erklærer en peker til en NSColor objekt
NSColor * theColor;
// Oppretter objektet
// Og tildele fargen svart til det
theColor = [NSColor blackColor];

Som du kanskje har gjettet, denne koden fungerer for mange andre farger også (blueColor, redColor, og så videre). Tabell 1 viser hele samlingen av forhåndsdefinerte komponenter som du kan bruke til å skape mange vanlige farger.

Tabell 1: Preset Color Components


Preset Component


Farge det Produserer


blackColor


Svart


blueColor


Lyse blå


brownColor


Brown


cyanColor


Lyseblå


darkGrayColor


Mørk grå


grayColor


Medium grå


greenColor


Lys grønn


lightGrayColor


Lys grå


magentaColor


Rosa-lilla


orangeColor


Orange


purpleColor


Lilla


redColor


Lyse rødt


whiteColor


Hvit


yellowColor


Lys og solrik gul

Til slutt, vil du ønsker noen farger som de forhåndsinnstilte komponentene ikke dekker. I så fall må du ty til noen av de mer avanserte farge metoder i AppKit. Den AppKit har tre typer fargeområder (måter å skape farge) som du kan bruke til å lage farger:

  • Enhetsavhengig (eller enhet)
  • Enhet uavhengig (eller kalibrert)
  • Oppkalt

Når du bruker enheten farger, kan du ikke være sikker på at du alltid ser den samme fargen på tvers av enheter. Du er sannsynligvis mest kjent med denne type farge, fordi de fleste hjem dataskjermer og skrivere vise det. Det er ikke så bra, men for profesjonell utskrift, fargekorrigering, og tilsvarende farge oppgaver.

For å komme rundt denne fargen problemet, begynte datamaskin og skriver produsenter skape maskinvare- og programvareløsninger for å kalibrere utstyret sitt. Tanken var at du skal kunne se samme type utgang uansett hvilken enhet du brukte. Kalibreringen er ment å gjøre rede for de særegenheter enheten din og justere den til å produsere nøyaktige farger.

Enheten avhengige type fargerommet har tre fargeområder. Vanligvis oppretter du farger ved å blande ulike mengder av spesifikke basisfarger. De tre blande ordninger som du kan bruke i enhetsavhengige farge er

  • DeviceRGB: rød, grønn, blå og alfa komponenter
  • DeviceCMYK: cyan, magenta, gul, svart, og alfa komponenter
  • DeviceWhite: alfa komponenter Hvit og

For resten av denne artikkelen må du bekymre deg bare DeviceRGB, fordi det er det beste valget for å vise grafikk på en skjerm. Når du får taket på det DeviceRGB fargerom, er det lett å bruke DeviceCMYK og DeviceWhite fargerom.

Nå er det på tide å få til koden. I stedet for å bruke fargene på de forhåndsinnstilte komponenter, kan du definere dine egne RGB-farger ved hjelp av colorWithDeviceRed funksjon. Funksjonen tar fire flyter som parametere. Disse fire tallene tilsvarer de tre fargekanalene (rød, grønn og blå) og alfakanalen. Hver parameter kan ha en verdi mellom 0,0 og 1,0; 1.0 er full på. Alfa parameter dikterer hvordan ugjennomsiktig fargen er. En verdi på 1,0 er fullstendig ugjennomsiktig, og en verdi på 0,0 er helt gjennomsiktig.

Denne ordningen nummerering i kontrast til de fargene som brukes i kjente applikasjoner som websider og Photoshop-dokumenter, hvor nummereringen har vanligvis et område mellom 0 og 255. For å korrelere med Cocoa måte å gjøre ting, tilsett 1 til verdien av hver fargekomponent og dividere med 256. For eksempel, hvis du ønsker å konvertere en Photoshop farge med RGB-verdiene (127,63,255) til RGB-verdiene for en NSColor, utføre dette enkelt regnestykke:

127 + 1 = 128/256 = 0,5
63 + 1 = 64/256 = 0,25
255 + 1 = 256/256 = 1.0

Å skape et NSColor objekt i DeviceRGB fargerom, bruke kode som dette:

// Erklærer en peker til en NSColor objekt
NSColor * theColor;
// Oppretter objektet
// Og tildele fargen svart til det
theColor = [NSColor colorWithDeviceRed: (float) 0.0
green: (float) 0.0 blå: (float) 0.0 alpha: (float) 1.0];

Legg merke til at de røde, grønne og blå parametre er alle satt til 0,0. Hvis du ønsket å lage en rød farge objekt, vil du bruke kode som dette:

// Oppretter objektet
// Og tildele fargen rød til det
theColor = [NSColor colorWithDeviceRed: (float) 1.0
green: (float) 0.0 blå: (float) 0.0 alpha: (float) 1.0];

Den røde parameter har en verdi på 1,0, og de grønne og blå komponenten har en verdi på 0,0. Ved å justere alfa verdi, kan du lage ulike nyanser av samme farge.

Når du har opprettet en farge objekt, er det eneste andre tingen du trenger å gjøre før du arbeider med det å bruke den innstilte funksjonen. Dette setter grafikk pennen til ønsket farge:

[Farge set];

Ja, det er så enkelt som det!