2013-05-13 11 views
10

Sto progettando un'applicazione e sto creando alcune immagini con PaintCode.Cosa consuma meno memoria un'immagine reale o un'immagine disegnata?

Utilizzando tale programma ottengo il codice effettivo per ogni immagine che creo, consentendomi così di scegliere di inserire il codice o utilizzare un'immagine reale. Mi stavo chiedendo cosa avrebbe consumato meno memoria, il codice dell'immagine o un PNG reale?

Conosco un consumo di memoria dell'immagine pari a width x height x 4 = bytes in memory ma non ho idea se un'immagine generata dal codice sia più efficiente in termini di memoria, meno efficiente in termini di memoria o addirittura in pareggio?

Questa decisione è particolarmente importante date le diverse risoluzioni dello schermo. è molto più facile creare un'immagine in codice ed espanderla a qualsiasi dimensione io voglia, piuttosto che andare su Photoshop ogni volta.

+1

"Mi chiedevo cosa avrebbe consumato meno memoria, il codice dell'immagine o un PNG effettivo?" Quindi, perché non provarlo con alcune immagini di esempio e vedere? – matt

risposta

4

Questa risposta varia da altre risposte perché ho l'impressione che il contesto grafico sia la destinazione più comune, ovvero che non si esegue sempre il rendering in una bitmap discreta. Quindi per gli scopi del disegno tipico:

Mi chiedevo cosa avrebbe consumato meno memoria, il codice immagine o un PNG effettivo?

È molto probabile che il codice comporti molto meno consumo di memoria.

Non ho idea se un'immagine generata dal codice sia più efficiente in termini di memoria, meno efficiente in termini di memoria o addirittura in pareggio?

Ci sono molte variabili e non esiste una semplice equazione per dirti quale è meglio per ogni dato input. Se è abbastanza semplice da creare con un WYSIWYG, è probabilmente molto più piccolo come codice.

Se è necessario creare rasterizzazioni o livelli intermedi per un renderer basato su vettori, la memoria sarà quasi uguale una volta aggiunto il primo livello. In genere, uno/non deve rendere ogni vista o livello (non CALayer, btw) a questi prodotti intermedi e invece il rendering direttamente nel contesto grafico. Quando tutte le viste vengono visualizzate direttamente nel contesto grafico, scrivono sulla stessa destinazione.

Con il codice, si apre anche a poche altre variabili che hanno il potenziale di aggiungere molta memoria. Gli effetti del caricamento dei font e del caching possono essere piuttosto alti e il generatore di codice che utilizzi non esaminerà come ottenere il miglior caching e la condivisione di queste risorse se trovi che è necessario ridurre al minimo il consumo di memoria.

1

Se il tuo obiettivo è disegnare immagini, dovresti provare a usare UIImageView se possibile. In genere è il modo più rapido ed economico per ottenere un'immagine sullo schermo ed è ragionevolmente flessibile.

qualcuno lo spiega meglio qui. source

0

Un'immagine vettoriale è quasi sempre più piccola nella memoria rispetto alla controparte raster, ad eccezione delle fotografie. In memoria però, entrambi devono essere rasterizzati se è necessario visualizzarli, quindi useranno più o meno la stessa quantità di memoria.

Tuttavia, sono molto scettico sull'utilità di PaintCode; in generale è meglio usare un formato di immagine standard come .svg o .eps, invece di un formato non standard come un dominio specifico (DSL) nell'obiettivo C.

+0

La risposta relativa al vettore rispetto al raster è corretta, tuttavia PaintCode genera codice Objective C. PaintCode può importare file SVG e PSD (entrambi i formati standard), nonché utilizzare le funzionalità di disegno incorporate. Vedi il link a PaintCode dall'OP per maggiori informazioni. – stevekohls

-2

Non fa alcuna differenza, a condizione che il finale la dimensione dell'immagine (in dimensioni puntiforme) è uguale alla dimensione del display (in dimensioni punto). Ciò che viene visualizzato in ultima analisi nella tua app è, ad esempio, una bitmap 100x100. Quelli sono lo stesso numero di bit, non importa come sono stati ottenuti per iniziare.

Il luogo in cui la memoria viene sprecata consiste nel trattenere un'immagine molto più grande (in dimensioni puntiforme) di quella che viene effettivamente visualizzata nell'interfaccia.

Se carico un 3MB PNG dalla mia app bundle, scala verso il basso a 100x100, e disegnare nell'interfaccia, e lasciare andare l'originale 3MB PNG, il risultato è esattamente la stessa quantità di memoria nel backing store come se disegnassi da zero il contenuto di un contesto grafico 100X100 utilizzando Core Graphics (che è ciò che PaintCode ti aiuta a fare).

+0

Fa la differenza (ovviamente) in quanta memoria occupa l'app sul dispositivo. Se lo si disegna in codice, sarà molto più piccolo rispetto a quando si salvano risoluzioni diverse come parte del pacchetto di app. Una volta caricato in RAM, come discuterete qui, non ci sarà alcuna differenza. – lnafziger

+9

Posso vederlo molto più di una semplice stampella. Se il tuo designer vuole creare qualsiasi tipo di immagine sofisticata che deve essere generata dinamicamente, qualsiasi forma non uniforme (ad esempio una figura umana o un logo) sarà più facile per loro disegnare in PaintCode piuttosto che crearlo a mano in modo programmatico. –

Problemi correlati