2010-07-22 3 views
1

je un Bitmap appelé "tampon" auquel jeobjet Graphics pas de rinçage correctement

  1. peins une autre image (en utilisant DrawImage)
  2. peindre un gradient partiellement transparent (en utilisant un LinearGradientBrush)

J'appelle Flush(FlushIntention.Sync) sur l'objet Graphics du tampon après chacune de ces étapes. Je peins ensuite le contenu du tampon sur un contrôle à l'écran.

Cependant, lors du débogage, j'ai remarqué que parfois le dégradé n'était pas peint sur le tampon. Qu'est-ce qui peut provoquer le saut de la deuxième opération de peinture même lorsque j'appelle explicitement une commande Flush synchronisée?

Y a-t-il une solution de contournement?

EDIT: Code échantillon

Bitmap background = ....; 
Bitmap buffer = new Bitmap(100, 100); 
Rectangle bufferBounds = new Rectangle(0, 0, buffer.Width, buffer.Height); 
Graphics bufferG = Graphics.FromImage(buffer); 

// First step 
bufferG.DrawImageUnscaled(background, 0, 0); 
bufferG.Flush(FlushIntention.Sync); 

// Second step 
LinearGradientBrush lgb = new LinearGradientBrush(bufferBounds, 
       maxColor, minColor, LinearGradientMode.Vertical); 
bufferG.FillRectangle(lgb, bufferBounds); 
bufferG.Flush(FlushIntention.Sync); 
+0

Une chance d'afficher votre code? –

+0

Modifié pour inclure le code. – kpozin

Répondre

0

Je remarque que vous ne créez pas l'objet Graphics dans un bloc à l'aide. Est-ce que Dispose() pourrait être nécessaire pour le vider complètement?

using (Graphics bufferG = Graphics.FromImage(buffer) 
{ 
... 
} 
+0

Appeler Dispose manuellement n'aide pas, malheureusement. – kpozin