2017-08-30 5 views
0

J'utilise un projet d'application de console C# pour générer des images raster, puis utilise l'outil ffmpeg pour générer la vidéo à partir de ces images. J'utilise un objet graphique g pour dessiner un objet bmp et l'enregistrer à générer le (s) cadre (s) [Le taux d'économie est de 25 images par seconde]. J'ai mis en œuvre le dessin [écriture] sur l'objet graphique fin, en effaçant "ON WHITE BACKGROUND", en effaçant très bien l'objet graphique, défaisant parfaitement les formes dessinées. 4) Je tentais de mettre en arrière-plan et importer des images et qui ont si bien que vous pouvez écrire sur le objet graphique [si le papier blanc, image de fond, importé image ... etc]C#, Empêcher l'effacement de traits d'effacer des parties de l'image d'arrière-plan chevauchée

Le problème que lorsque Je tente d'effacer une partie de l'image qui a un arrière-plan [image de fond, par exemple les lignes, graphique, coordonnées..etc]. l'objet graphique efface la partie de l'image où le trait de l'effacement [couleur blanche se chevauche]. Sûr Cette [couleurs blanches pour effacer les traits] fonctionnait correctement avec un fond de page blanc.

Je suis un peu penser à haute voix, en toute logique un, il est parfaitement logique que les gommes à effacer de course blancs marqueront sur les milieux non-blancs

[il semble que la gomme a effacé l'arrière-plan]. Existe-t-il (a) une (des) méthode (s), un mécanisme, un algorithme de superposition, un mécanisme de coloration :) pour faire apparaître les parties de l'image d'arrière-plan sous les points d'effacement non déformés. Par exemple: 1) Placer l'image d'arrière-plan sur la première couche 2) Effectuer le dessin sur le calque supérieur 3) Lors de l'effacement [sur le calque supérieur], utiliser une couleur transparente ou un mécanisme de contour pour afficher l'image d'arrière-plan -les parties qui étaient/étaient chevauchées auparavant avec le fond ...... Est-ce possible?

Merci pour votre aide et votre contribution à l'avance. Notez que vous ne pouvez pas avoir la solution parfaite. Mais vos pensées sont appréciées.

Répondre

0

Résolution: Masquage l'image originale (image source avec le dessin de toutes mes formes) et le dessin sur un bmp de destination:

 public static Image CropToPath(Image srcImage, List<Point> Points, Pen p, Bitmap bmp) 
    { 


     Bitmap mask = bmp;//new Bitmap(Bitmap.FromFile((new DirectoryInfo(outPutPath)).GetFiles()?.OrderByDescending(f => f.CreationTimeUtc).First()?.FullName)); 

     DrawPoints(Graphics.FromImage(mask), p, Points); 


     using (var imgattr = new ImageAttributes()) 
     { 
      // set color key to Line 
      imgattr.SetColorKey(Color.Gainsboro, Color.Gainsboro); 

      // Draw non-line portions of mask onto original 
      using (var g3 = Graphics.FromImage(srcImage)) 
      { 
       SmoothGraphic(g3).DrawImage(
        mask, 
        new Rectangle(0, 0, srcImage.Width, srcImage.Height), 
        0, 0, srcImage.Width, srcImage.Height, 
        GraphicsUnit.Pixel, imgattr 
       ); 

       return srcImage; 
      } 



     } 


    }