2010-02-09 5 views
5

In C# normale è facile disegnare in una bitmap usando il metodo Grpahics.DrawString(). Silverlight sembra aver eliminato gli oggetti Bitmap e Graphics non è più disponibile. Quindi ... Come faccio a manipolare/creare una bitmap quando utilizzo Silverlight? Se aiuta, sto usando Silverlight 3.Come si disegna una stringa in una bitmap in Silverlight?

Lascia che ti dica cosa sto facendo. Mi viene dato un modello, fondamentalmente un'immagine pre-renderizzata. L'utente è quindi in grado di selezionare da più immagini e inserire il testo deisred. Quindi lo renderò all'immagine, regolando le dimensioni ecc ... entro i limiti e centrandolo nell'area predefinita dell'immagine. Se riesco a calcolare la dimensione (come nel metodo MeasureString) e quindi a disegnare la stringa (come nel metodo Graphics.DrawString), ciò andrebbe bene. La vera domanda, non importa perché voglio essere in grado di farlo, è possibile farlo?

+2

C'è sempre una preoccupazione da parte di chi dà consigli che è appropriato al problema in questione. Non sapendo che qualcuno vuole fare qualcosa (specialmente qualcosa che sembra sconsiderato in superficie) ci mette a disagio.Fornire il motivo __why__ potrebbe consentire a qualcuno di fornire una soluzione più recente che potrebbe non essere ancora stata presa in considerazione. – AnthonyWJones

risposta

3

La domanda è: perché vuoi? Perché non usare solo un TextBlock?

Se si sta tentando di generare un'immagine in modo dinamico, utilizzare i controlli Silverlight/WPF standard (incluso TextBlock) e render in un WritableBitmap.

Edit:

Ok, hai aggiornato e ampliato, il che mi dà più per andare avanti. Sfortunatamente, non ti piacerà la risposta. Innanzitutto, tieni presente che Silverlight e WPF in generale sono basati su vettori e sono destinati ad essere utilizzati come tali. Sebbene Canvas ti permetta di fare manipolazioni pseudo-pixel, non puoi essere quasi preciso come il GDI della vecchia scuola. Questo è un fattore del tuo medium. Se devi assolutamente misurare le cose nel modo in cui vuoi misurarle, ti suggerisco di costruire le tue immagini su un server remoto e trasmetterle alla tua app Silverlight.

È possibile calcolare la dimensione sullo schermo del testo visualizzato tramite un TextBlock utilizzando le proprietà ActualWidth e ActualHeight. Ma funziona solo su un controllo già reso. Qualcosa come MeasureString semplicemente non è disponibile in Silverlight. In base alla descrizione della tua app, alcune interazioni con l'utente potrebbero portare a termine ciò che desideri. L'utente seleziona l'immagine, inserisce il testo e viene mostrata un'anteprima. L'utente può quindi regolare la larghezza e l'altezza delle varie aree di testo fino a quando non è soddisfatto, a quel punto è possibile scattare un'istantanea utilizzando il metodo di rendering che mi è piaciuto sopra.

+0

OK ... Allora, come lo farei allora? Lascia che ti dica cosa sto facendo. Mi viene dato un modello, fondamentalmente un'immagine pre-renderizzata. L'utente è quindi in grado di selezionare da più immagini e inserire il testo deisred. Quindi lo renderò all'immagine, regolando le dimensioni ecc ... entro i limiti e centrandolo nell'area predefinita dell'immagine. Se riesco a calcolare la dimensione (come nel metodo MeasureString) e poi a disegnare la stringa data (come nel metodo Graphics.DrawString) usando la tua tecnica, allora sarebbe perfetto. La vera domanda, non importa perché voglio essere in grado di farlo, è possibile farlo? – Spenduku

+0

@Spencer: dovresti spostare quel commento nella tua domanda. –

+0

La risposta non è quella che speravo, ma sembra essere l'unica via percorribile. Quindi grazie! :) – Spenduku

3

Quanto segue può funzionare, è un po 'nebuloso perché non ho ancora provato me stesso.

L'oggetto che stai cercando è il WritableBitmap.

Si crea un albero visivo, ad esempio si crea un Grid o Canvas (non lo si aggiunge all'interfaccia utente). Aggiungi ad esso l'immagine selezionata e un TextBlock posizionato e dimensionato come preferisci.

Creare un nuovo WritableBitmap di una dimensione specifica o utilizzare l'immagine selezionata per inizializzarlo.

Utilizzare il metodo WritableBitmapRender passando la radice sopra Grid o Canvas ad esso.

Ora hai una bitmap che dovresti usare per fare tutto ciò che è necessario per fare ciò che richiede tutto questo salto del telaio in primo luogo.