2011-06-14 5 views
2

J'essaie de dessiner un rectangle blanc (100 x 200) et au milieu, une image plus petite (50 x 75) de sorte qu'elle ressemble à l'arrière d'une carte à jouer. Avec le code suivant, tout ce que je reçois sont les carreaux avec la bordure autour d'eux, mais pas d'image.Superposer des images au-dessus d'un autre

 //generate temporary control to render image 
     Image temporaryImage = new Image { Source = emptyTileWatermark, Width = destWidth, Height = destHeight }; 

     //create writeableBitmap 
     WriteableBitmap wb = new WriteableBitmap(outputWidth, outputHeight); 
     wb.Clear(Colors.White); 

     // Closed green polyline with P1(0, 0), P2(outputWidth, 0), P3(outputWidth, outputHeight) and P4(0, outputHeight) 
     var outline = new int[] { 0, 0, outputWidth, 0, outputWidth, outputHeight, 0, outputHeight, 0, 0}; 
     wb.DrawPolyline(outline, Colors.Black); 
     wb.Invalidate(); 
     wb.Render(temporaryImage, new TranslateTransform { X = destX, Y = destY }); 
     wb.Invalidate(); 

Je tiens à souligner que, pour faire le .Clear(), je me sers du projet WriteableBitmapEx.

Des idées ???

Répondre

2

Votre image temporaire n'a pas été mise en page et lorsque vous la produisez, elle est toujours vide. Pour remédier à cela, vous êtes censé appeler Measure and Arrange, ce n'est pas toujours fiable mais en l'enveloppant dans une Border et en mesurant et arrangeant cela a semblé fonctionner. Tout cela étant dit puisque vous utilisez déjà WriteableBitmapEx, vous pouvez utiliser sa méthode Blit à la place.

WriteableBitmap emptyTile = new WriteableBitmap(emptyTileWatermark); 
//create writeableBitmap 
WriteableBitmap wb = new WriteableBitmap(outputWidth, outputHeight); 
wb.Clear(Colors.White); 

// Closed green polyline with P1(0, 0), P2(outputWidth, 0), P3(outputWidth, outputHeight) and P4(0, outputHeight) 
var outline = new int[] { 0, 0, outputWidth, 0, outputWidth, outputHeight, 0, outputHeight, 0, 0}; 
wb.DrawPolyline(outline, Colors.Black); 
wb.Blit(new Rect(destX,destY,destWidth,destHeight),emptyTile,new Rect(0,0,emptyTileWatermark.PixelWidth,emptyTileWatermark.PixelHeight)); 
+0

Fonctionne parfaitement! Je vous remercie! –

0

Je ne suis pas un expert en traitement d'image, mais il semble que la fonction Blit serait utile dans ce cas. Au lieu d'essayer de rendre temporaryImage, créez un nouveau WriteableBitmap avec votre emptyTileWatermark comme source. Utilisez ce paramètre WriteableBItmap en tant que paramètre Source et wb en tant que paramètre Dest et enregistrez les deux scripts WriteableBitmaps. (La fonction Blit est fournie avec WriteableBitmapEx).

Questions connexes