Come implementereste / progettate una classe che deve rappresentare una bitmap? Sono bloccato a gestire le diverse modalità di colore possibili e continuo a pensare che questo dovrebbe essere in qualche modo implementabile usando modelli / schemi di progettazione in un modo elegante ed efficiente:
Supponiamo di avere un file.bmp. Quindi vuoi aprire quel file per usarlo nella tua applicazione:
Bitmap myBitmap();
myBitmap.open("file.bmp");
La bitmap che hai appena aperto potrebbe avere i colori RGB, oppure potrebbe essere un'immagine in scala di grigi o anche un'immagine da 1 bit per pixel (cioè bianco e nero). Nella mia applicazione, voglio operare sui dati dell'immagine (pixel). Ad esempio, ho bisogno di una sorta di filtro di luminosità in cui oscuro i pixel di cui (Rosso + Blu + Verde) / 3 è al di sotto di qualche valore di filtro (cioè 100).
Quindi ho bisogno di accedere ai pixel:
Pixel somePixel = myBitmap.pixelAt(10,30);
Ma ora affronto il problema di NON sapere che tipo di pixel sia. Naturalmente, potrei fornire sottoclassi di Pixel
(che quindi è una classe base astratta) che TUTTA implementa metodi come getRGB()
, getGrayScale()
, ... dove ogni sottoclasse dà un modo di convertire tra quei colormodes (cioè RGB in scala di grigi)
Ma questo sembra ... hm, "sbagliato".
Conosci qualche buon metodo per implementarlo?
Una bella funzionalità a cui stavo pensando è qualcosa del tipo:
myBitmap.getMode(); // A RGBMode object, RGBMode being a subclass of Mode
myBitmap.setMode(new BlackWhiteMode()); // Converts the bitmap to a 1bpp image
Qualche idea, consigli, miglioramenti?
Quindi la parte più difficile è rappresentare le diverse modalità di colore, come RGB (8 bit e 4 bit), HSV, scala di grigi, nero bianco, ... senza compromettere il codice dell'applicazione.