2010-09-28 4 views
0

Je dois ajouter à l'exécution à une image inmémoire 15 lignes de pixels transparents en haut et 20 en bas. Les images sont chargées dans un TcxImagelist (à partir de DevExpress Express Library), elles peuvent donc être récupérées en tant que bitmaps 32 bits.comment ajouter des pixels transparents au-dessus et au-dessous d'une image bitmap 32 bits

Si l'image est 400x75 après la manipulation doit être 400x (75 + 15 + 20) = 400x110

Comment effectuer cette tâche?

Répondre

2

Il n'y a pas de pixels "transparents". Tout ce que vous pouvez faire est de les marquer pour le moteur de rendu afin qu'il sache qu'ils ne sont pas censés être affichés. voici les 3 méthodes les plus courantes de marquage, mais celui que vous utilisez dépend du moment où vous faites pour le rendu:

  • Utilisez une carte de la transparence: un second pixmap qui indique le « niveau » de transparence de chaque pixel. Le rendu utilise ensuite cela comme une valeur de pondération pour combiner les couches supérieure et inférieure dans la couleur finale. Si vous voulez juste une transparence binaire (opaque/transparente), vous pouvez utiliser un bitmap et utiliser un simple XOR sur chaque pixel, ce qui le rend très rapide.
  • Définir une "couleur transparente". Vous pouvez alors le XOR avec la couleur transparente et la couche inférieure. Aussi très rapide et ne nécessite aucun stockage supplémentaire. Il a cependant quelques effets secondaires (une couleur ne peut pas être utilisée dans l'image de la couche supérieure, par exemple)
  • utilise le dernier octet de la bitmap 32 bits comme niveau de transparence (canal alpha). En effet, vous stockez la carte de transparence (255 niveaux de transparence distincts) avec l'image.

Maintenant, dans votre cas, puisque vous semblez copier seulement un rectangle sur un rectangle, un autre aproche qui serait: créer une toile de la même taille que l'image finale, copiez le rectangle inférieur dessus et Dessinez le sur le dessus.

+0

Salut, merci, pourriez-vous poster du code pour la mise en œuvre de l'idée de toile? Cela semble approprié pour mon approche. – LaBracca

+0

err ... c'est vraiment du code trivial, vous savez: TCanvas.CopyRect et vous avez terminé. – Stephane

Questions connexes