Domanda

Non ho oggetti contenenti riferimenti al quarzo-2D (colori che descrivono, motivi di riempimento, sfumature e ombre) in Cocoa. Vorrei implementare il protocollo NSCoding nei miei oggetti e, quindi, bisogno di serializzare quelle strutture Quartz 2D-opachi.

Le soluzioni possibili potrebbero essere:

  • Definire un insieme di proprietà nei miei oggetti che consentono di impostare le strutture di dati da zero ogni volta che sono necessari. Questi possono poi essere serializzati facilmente. Esempio: Conservare quattro galleggianti per rosso, verde, blu e alfa, quindi utilizzare CGColorCreate. Svantaggi: La duplicazione di informazioni, in tal modo il potenziale coerenza e (finora minore) problemi di consumo di spazio. Mi sarebbe necessario scrivere immobili incastonatori manualmente che ricreano la struttura quarzo ogniqualvolta un componente vengono modificati. Che sarebbe gonfiare il mio codice in modo sostanziale.

  • Leggi le proprietà utilizzando funzioni di quarzo. Esempio: Usa CGColorGetComponents per i colori. Svantaggi: Sembra funzionare per i colori. Ma non ci sono funzioni equivalenti per altre strutture, quindi non vedo come questo possa funzionare per le cose come le sfumature, sfumature, ombre ecc.

  • leggere le proprietà direttamente dalle prime, strutture opache. Svantaggi: Come dice la documentazione, le strutture si suppone essere opaco. Quindi, nel caso in cui qualcosa cambia sotto il cofano, il mio codice si romperà. (Apple certamente non avrebbe fornito una funzione come CGColorGetComponents se questo doveva essere fatto.) Inoltre, cose come il CGFunctionRef all'interno di un CGShadingRef sarebbe davvero essere in cerca di guai.

Qual è la migliore pratica per la serializzazione di strutture quarzo?

È stato utile?

Soluzione

La risposta varia praticamente da una classe a quella successiva:

  • CGImage: Usa CGImageDestination per fare un file TIFF di esso. (Equivalente a metodo TIFFRepresentation di NSImage.)
  • CGPath: Scrivi una funzione applicatore è possibile utilizzare per descrivere gli elementi del percorso come, per esempio, il codice PostScript. Scrivere un semplice interprete per andare nella direzione opposta.
  • CGColorSpace:. È possibile esportare la rappresentazione ICC
  • CGColor:. Come hai descritto, ma non dimenticate di includere lo spazio colore
  • CGLayer: Risvolto:. Fare un contesto bitmap, disegnare lo strato in esso, e scaricare l'immagine del contesto, quindi serializzare che
  • CGFont: Il nome dovrebbe essere sufficiente per la maggior parte delle applicazioni. Se sei stato veramente fantasia (vale a dire, usando la funzione di variazioni), ti consigliamo di includere dizionario di variazioni del carattere. Dovrete mantenere la vostra conoscenza della dimensione del carattere a parte, dal momento che CGFont non ne ha uno e CGContext non consente di ottenere quello impostato in esso.
  • CGPDFDocument: Da una rapida occhiata, sembra CGPDFObjects sono tutti immutabili, in modo che ci basta archiviare i dati in formato PDF originali o l'URL che hai da
  • .
  • CGGradient, CGPattern, CGShading, e la maggior parte delle altre classi: Yup, sei fregato. Avrete solo bisogno di mantenere tutte le informazioni è stato creato l'oggetto separatamente.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top