/// <summary> /// Nastavi rozliseni scene a prezvorkuje klicove snimky /// </summary> /// <param name="width"></param> /// <param name="height"></param> public void SetResolution(int width, int height) { mergeWithBackground(); morphManager.ResampleKeyFrames(width, height); selectedFrame.ApplyWarping(); redraw(); }
/// <summary> /// Ziska morphovany snimek /// </summary> /// <param name="index">Index pozadovaneho snimku</param> /// <param name="startKeyFrame">Prvni klicovy snimek</param> /// <param name="endKeyFrame">Druhy klicovy snimek</param> /// <returns>Morphovany snimek</returns> private Frame getMorphedFrame(int index, Frame startKeyFrame, Frame endKeyFrame) { // inicializace vrstev pro modifikaci if (morphedBitmap == null) { morphedBitmap = new RenderTargetBitmap(endKeyFrame.Format.PixelWidth, endKeyFrame.Format.PixelHeight, 96, 96, endKeyFrame.WarpedBitmap.Format); } double ratio = (double)(index - startKeyFrame.Index) / (endKeyFrame.Index - startKeyFrame.Index); // Vytvoreni noveho snimku se ziskanou bitmapou Frame morphedFrame = new Frame(index); interpolateGrid(morphedFrame, startKeyFrame, endKeyFrame, 1 - ratio); startKeyFrame.ApplyWarping(morphedFrame.Grid.Nodes); endKeyFrame.ApplyWarping(morphedFrame.Grid.Nodes); // Prolnuti dvou obrazku layerImage.Source = endKeyFrame.WarpedBitmap; layerImage.Opacity = ratio; layerInterleave.Background = startKeyFrame.WarpedBitmap != null ? (Brush) new ImageBrush(startKeyFrame.WarpedBitmap) : Brushes.White; layerInterleave.Arrange(new System.Windows.Rect(0, 0, endKeyFrame.Format.PixelWidth, endKeyFrame.Format.PixelHeight)); morphedBitmap.Render(layerInterleave); // Ulozeni prolnutych snimku do bitmapy morphedFrame.SourceBitmap = morphedBitmap; //morphedFrame.ApplyWarping(); return(morphedFrame); }