2010-09-07 13 views
6

Ho bisogno di creare un'immagine con uno sfondo trasparente in .NETCF, io uso il magenta come sfondo che voglio rendere trasparente. Il modo in cui ho provato a farlo è quello di sovrascrivere onPaint(). Ma non riesco a ottenere lo sfondo trasparente? Ecco quello che ho:Trasparenza nel framework compatto

protected override void OnPaint(PaintEventArgs e) 
{ 
    Graphics g = e.Graphics; 

    ImageAttributes imageAttributs = new ImageAttributes(); 
    imageAttributs.SetColorKey(Color.FromArgb(255, 0, 255), 
     Color.FromArgb(255, 0, 255)); 
    g.DrawImage(cross, crossRect, 200, 10, cross.Width, cross.Height, 
     GraphicsUnit.Pixel, imageAttributs); 

    base.OnPaint(e); 
} 

Ma quando cerco di includere le ImageAttributes la mia immagine non è redatto a tutti?

risposta

9

Ah, trasparenza nella CF. Le ore ei giorni che si possono (e hanno) sprecare in questo. In primo luogo, potresti darci qualche informazione in più sulle immagini che stai utilizzando (bitmap, png, ecc.) Ma probabilmente ne dedurremo un po 'dal tuo post. Dobbiamo anche sapere se questo si trova in un contenitore secondario (come all'interno di un frame, pannello, ecc.).

La trasparenza dei tasti colorati è sicuramente supportata (è stato dal 2.0 - forse anche prima). Il problema qui è che otterrai un genitore "sanguina attraverso" se sei in un bambino. Questo sembra essere quello che stai provando, ma non è completamente ovvio per me quindi ho alcune domande di follow-up per chiarimenti.

  • L'OnPaint è un override del modulo o un controllo personalizzato?
  • Perché stai chiamando la base OnPaint() dopo il tuo lavoro (al contrario di prima o per niente)?
  • Hai scavalcato OnPaintBackground?

La mia ipotesi in questo momento è che si ha qualche bug nel modo in cui si chiama tutto, ma non abbiamo abbastanza codice per individuarlo.

Qui ci sono alcuni più risorse sulla pittura e la trasparenza:

Non ci sono più risorse per le cose di alfa-canale (che è tutt'altro che semplice nel CF), ma s quando sembra che tu stia tentando colorkey, questi dovrebbero essere sufficienti.

+0

in casi semplici perché non usare solo this.pnlMyPanel.BackColor = this.BackColor? – hellboy

3

Il framework compatto non supporta la trasparenza: è tuttavia possibile ottenerlo tramite l'interoperabilità COM. Chris Lorton ha un very good blog post su alpablending sul framework compatto.

1

Sembra che OpenNETCF abbia già gestito wrapper attorno a questo. Sono sicuro che Chris Tacke potrebbe commentare di più su questo. Sembra essere piuttosto attivo su questo sito, ma sembra picchiato a questo :)