/// <summary> /// Quando lavoro con una singola foto, se vado sullo schermo del pubblico, /// devo fare vedere la foto più bella che ho (cioè quella grande) /// Il problema è che la foto grande, potrebbe ancora non essere stata calcolata /// </summary> /// <param name="fotografia"></param> /// public void eseguiSnapshotSuFinestraPubblica(Fotografia fotografia, bool forzaAperturaWin) { // Se la finestra è chiusa e il flag non mi forza l'apertura non faccio niente if (!forzaAperturaWin && _snapshotPubblicoWindow == null) { return; } FotoDisposeUtils.Instance().DisposeFotografia(fotografia); IdrataTarget quale = AiutanteFoto.qualeImmagineDaStampare(fotografia); AiutanteFoto.idrataImmagineDaStampare(fotografia); IImmagine immagine = AiutanteFoto.getImmagineFoto(fotografia, quale); forseApriSnapshotPubblicoWindow(); snapshotPubblicoViewModel.snapshotImageSource = ((ImmagineWic)immagine).bitmapSource; }
private void viewFotoFullScreen() { // Qui devo capire quale foto verrà idratata IdrataTarget quale = AiutanteFoto.qualeImmagineDaStampare(singolaFotoTarget); // Qui idrato AiutanteFoto.idrataImmagineDaStampare(singolaFotoTarget); // Qui ricavo la foto IImmagine img = AiutanteFoto.getImmagineFoto(singolaFotoTarget, quale); var imageSource = ((ImmagineWic)img).bitmapSource as ImageSource; // Qui passo la foto al viewmodel che la deve visualizzare PanAndZoomViewModel panZommViewModel = new PanAndZoomViewModel(imageSource); // TODO anti-pattern : aprire finestre nel WiewModel. // usare openPopupDialogRequest come già fatto per associazione faccia fotografo PanAndZoomWindow w = new Digiphoto.Lumen.UI.PanAndZoom.PanAndZoomWindow(); w.DataContext = panZommViewModel; w.ShowDialog(); }
/// <summary> /// /// </summary> /// <param name="values">Un array di oggetti cosi: composto:</br> /// indice = 0 : un oggetto Fotografia /// indice = 1 : un viewModel (o una qualsiasi classe) che implementi l'interfaccia IContenitoreGriglia /// </param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns>una ImageSource</returns> public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { ImageSource imageSource = null; try { Fotografia fotografia = (Fotografia)values[0]; IContenitoreGriglia vmContenitoreGriglia = (IContenitoreGriglia)values[1]; IdrataTarget quale; // Se sto visualizzando una sola foto, oppure due affiancate su di una riga .... scelgo alta qualita if (vmContenitoreGriglia != null && richiedeAltaQualita(vmContenitoreGriglia.numRighe, vmContenitoreGriglia.numColonne)) { // ALTA QUALITA (più lento) quale = AiutanteFoto.qualeImmagineDaStampare(fotografia); AiutanteFoto.idrataImmagineDaStampare(fotografia); } else { // BASSA QUALITA (più veloce) quale = IdrataTarget.Provino; } IImmagine immagine = AiutanteFoto.getImmagineFoto(fotografia, quale); if (immagine != null) { imageSource = ((ImmagineWic)immagine).bitmapSource as ImageSource; } } catch (Exception ee) { _giornale.Error("estrazione immagine fallita", ee); // Alcune immagini possono essere rovinate o mancanti. Devo proseguire. imageSource = null; } return(imageSource); }