Sto cercando di creare un'applicazione per l'editor bitmap per l'iPhone che sarebbe simile a Pennelli o Livelli o una versione ridotta di Photoshop. Mi piacerebbe essere in grado di supportare immagini con risoluzione 1000x1000 con circa 4 livelli, se possibile.Funzione di annullamento rapido per l'applicazione di editor bitmap
Sto provando a progettare il mio sistema di annullamento/ripristino prima di scrivere troppo codice e sto avendo problemi reali con una buona soluzione a causa dei limiti di un dispositivo mobile e del fatto che le operazioni dell'editor di bitmap sono di solito distruttivo. I disegni di annullamento/ripetizione più comuni che conosco sono:
Utilizzare il modello di comando. Si memorizza lo stato iniziale e i comandi utilizzati per trasformarlo nello stato corrente. Per annullare, si ricarica lo stato iniziale e si riproducono tutti i comandi tranne l'ultimo.
Utilizzare il modello di memento. Dopo ogni operazione, si memorizzano informazioni sufficienti per essere in grado di ripristinare tale operazione.
I problemi prevedo sono: modello
Comando: Cosa faccio dopo 500 operazioni di modifica e voglio annullare l'ultimo? Il caricamento dello stato iniziale e l'applicazione di 499 potrebbero richiedere molto tempo, soprattutto se alcune di queste sono costose come ad es. applicando i filtri sfocatura. Non mi piace il modo in cui l'annullamento richiede una diversa quantità di tempo in diversi scenari.
Schema di memoria: il salvataggio delle parti della bitmap che è stata modificata richiede molta memoria. Anche la memorizzazione nella cache di questi bitmap su disco può essere lenta (quindi potrei avere problemi a memorizzare nella cache i bitmap se l'utente sta apportando molte modifiche veloci) e non sono sicuro delle implicazioni sull'utilizzo della batteria.
Le uniche soluzioni che in mente sono:
Utilizzare il modello di comando e Memento Pattern dove ogni 10 comandi o così o dopo un'operazione costosa, l'intero stato è anche salvati (che ti offre una funzione di salvataggio automatico gratis). Per annullare, ricarico lo snapshot più vicino e poi rigiro i comandi. Preferirei comunque evitare questa complessità.
Utilizzare il modello di memento e forzare l'utente ad attendere che i bitmap vengano memorizzati nella cache. Questo non è male se costruisco questa volta in es. in attesa che venga applicato un filtro ma non funziona bene tra una pennellata e l'altra.
Sono un consiglio? Sarei interessato a sapere come fanno alcune app esistenti.
Posso pensare a tutti i tipi di strani ibridi di cui sopra ma hanno tutti problemi evidenti. Tutto quello che posso pensare di fare è vivere con alcuni di questi problemi o compromettere l'app per rendere il problema più semplice (ad esempio, ridurre le dimensioni della dimensione massima della bitmap). Ho notato che diverse app hanno dimensioni di bitmap e limiti di strato al massimo piuttosto bassi.
+1: è un piacere vedere domande così ben studiate (e scritte)! E benvenuti a StackOverflow, Radent :-) –
Grazie, probabilmente puoi dire che questo problema mi sta facendo impazzire in questo momento. :-) – Radent
Hai misurato il tempo necessario per memorizzare nella cache le bitmap? –