Image Resize Aliasing in WPF V4 ma non sotto v3.5
-
24-10-2019 - |
Domanda
Sto usando WPF per una condotta di ridimensionamento delle immagini che ha lavorato splendidamente sotto .NET v3.5. Ho appena aggiornato il progetto per v4.0 di destinazione e ora tutti i miei immagini ridimensionate sono fortemente alias. Nessuno del codice dell'immagine gasdotto è cambiata.
-
ha un'impostazione predefinita WPF cambiato tra v3.5 e v4.0?
-
Come faccio a controllare il dithering delle mie immagini bitmap ridimensionate in WPF?
sto usando BitmapImage
, DrawingVisual
, DrawingContext
, RenderTargetBitmap
, BitmapEncoder
e BitmapFrame
ma io non sto vedendo tutte le proprietà relative al dithering. GDI + ha avuto un gruppo di impostazioni, quindi immagino che mi manca qualcosa.
Aggiornamento: sembra che tutte le soluzioni che ho visto assumere un oggetto o un ambiente Window XAML. Questo viene eseguito all'interno di un servizio di Windows che non ha interfaccia utente. Ho bisogno di un modo per influenzare programmazione questa impostazione.
I specificamente passato da GDI + per WPF perché GDI + ha perdite di memoria nella gestione di lungo processi come servizi e applicazioni web.
Soluzione
L'unico modo sono stato in grado di influenzare l'impostazione di BitmapScalingMode
è quello di ereditare dalla classe DrawingVisual
e impostare tramite la sua funzione di accesso protetto:
// exposes BitmapScalingMode (also works for other protected properties)
public class MyDrawingVisual : DrawingVisual
{
public BitmapScalingMode BitmapScalingMode
{
get { return this.VisualBitmapScalingMode; }
set { this.VisualBitmapScalingMode = value; }
}
}
Se qualcun altro sa di un modo migliore per impostare questo, mi sarebbe stato entusiasta di sentire su di esso.
Sembra che questo dovrebbe funzionare:
RenderOptions.SetBitmapScalingMode(myDrawingVisual, BitmapScalingMode.HighQuality);
... ma non è così. A quanto pare essere al di fuori del tempo di esecuzione a finestre XAML deve significare che non è possibile impostare i valori appropriati.
Altri suggerimenti
Il BitmapScalingMode predefinito era Fant in 3.0 ma in 4.0 è ora bilineare. È possibile modificare il valore di default alcuni modi diversi. Un paio descritto qui .