Problème capture écran + RichTextBox [Résolu]

Signaler
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008
-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
-
Salut à tous,

J'ai un souci. Mais avant tout je vais expliquer ce que j'ai fait comme programme.
Voilà j'ai une form, sur cette form, j'ai un RichTextBox.

Le BackGround de ma form est une image. Cette image est consitué d'un triangle noir, et tout autour j'ai du rouge. Je définis la couleur de transparence en Rouge.
Ce qui me donne une form triangulaire. Au sein de ce triangle j'ai placé ma RichTextBox.

Mon premier souci : Je donne la possibilité à l'utilisateur de saisir une autre couleur de caractère dans la RichTextBox. Du coup mon souci, c'est que si l'user veux écrire en rouge, cette couleur étant transparente alors j'aurai les lettres transparentes. Je voudrais pour ce premier souci savoir s'il y avait un moyen que la transparence s'applique qu'à la form et nom aux controles possés sur la form.

Mon deuxième souci : c'est que je voudrais imprimer cette form. Mais quand je fais une capture d'ecran, j'ai deux autres souci :). Premièrement il me capture non pas avec la transparence, mais avec la couleur de fond (Rouge).
Deuxièment et c'est là le plus embetant, c'est que ma RichTextBox ne s'affiche pas, du moins le text, car on voit la bordure.

Merci de votre aide.

@+

Manu

12 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Ce que tu veux c'est une région qui correspond exactement à ton bitmap !?

Cette fonction est pas très optimisée, passe le bitmap et la couleur de fond transparente.

private Region MakeRegionFromBitmap( Bitmap bitmap, Color transparency )
{
if ( bitmap == null )
throw new ArgumentNullException( );


int width = bitmap.Width;
int height = bitmap.Height;
GraphicsPath path = new GraphicsPath( );


for ( int y = 0; y < height; y++ )
{
for ( int x = 0; x < width; x++ )
{
if ( bitmap.GetPixel( x, y ) != transparency )
{
path.AddRectangle( new Rectangle( x, y, 1, 1 ) );
}
}
}


Region region = new Region( path );
path.Dispose( );
path = null;


return region;
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut tu peux remplacer la couleur de fond transparente par une région :

// Dans le constructeur de la forme.

Point[ ] points = new Point[ ]
{
new Point( 10, 110 ),
new Point( 110, 10 ),
new Point( 210, 110 )
};


GraphicsPath path = new GraphicsPath( );
path.AddPolygon( points );


this.Region = new Region( path );
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Qu'est ce que t'appel Region ?? Je début avec tous ce qui est graphic alors là, je comprend pas c'est quoi la région??

Manu
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Bha.. je t'ai donné un exemple, comme tu peux le voir la classe Form ( Control ) contient une propriété nommé Region, qui attend un objet de la classe Region.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Salut,

Je viens de tester ton code. Ca me fait bien une form, le problème c'est que si la form est ronde.
Mon image est un triangle disign.

Manu
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Euh je comprends pas ce que tu dis là !?

Mon exemple c'est pour avoir une forme triangulaire, c'est bien ce que tu voulais ?
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Désolé la fatigue :).

Je voulais dire que ça me fait bien une form triangle :), mais mon image est arrondi, sur les bords du coup je vois pas comment faire. Et Mon image n'est pas un rectangle régulier. C'est à dire que les cotés ne sont pas tout à fait droit.

Merci :)

Manu
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Alors je réexplique mon problème.
Admettons une form bizare. On va prendre l'exemple d'une voiture. On prend un image de voiture, et on applique la couleur rouge en arrière plan. La méthode que j'utilise pour que la forme de la form soit de la forme de la voiture : est de mettre comme couleur de transparence la couleur Rouge, et d'enlever les bordures de la form.

Jusque là ça marche nickel.
Mon premier problème c'est que sur cette forme j'ai mit un RichTextBox. Et que je donne la possibilité à l'utilisateur de changer la couleur de la police. Et si l'user met la police en rouge. Les caractères sélectionnés seront transparent car le rouge est la couleur de transparence.
1 : Donc pour ce problème je demandais s il y avait moyen d'appliquer cette transparence qu'à la form et non aux controles possé dessus ?? (Ma RichTextBox)

Mon deuxième souci c'est que cette form je veux l'imprimer.
J'ai cherché sur le forum comment le faire et j'ai eu une première solution qui est de faire un ScreenShot de la form.Mais le problème c'est qu'il me prend la form avec le fond initial sans la transparence, le rouge. Alors pour cela, je parcours le bitmap et quand je vois un pixel rouge, je le change en transparent, et ça marche :), mais le problème c'est que je ne vois pas le text de ma RichTextBox.
2 : Ici mon souci c'est que j'arrive pas à voir le texte du controle RichTextBox., je vois une ombre (bordure) du RichTextBox mais sans le texte.

Et le problème qui se posera quand je pourrais afficher le texte c'est que s'il est en rouge, il sera supprimé, il sera transparent.

Si quelqu'un à des infos ?

Merci @+

Manu
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Le code que je viens de te donner "MakeRegionFromBitmap" correspond à ton premier problème par contre j'ai pas testé pour l'impression.

Regardes le résultat sur cette capture :

http://up.mezimages.com/up/303006Lutinore.jpg
Messages postés
107
Date d'inscription
lundi 9 juin 2003
Statut
Membre
Dernière intervention
20 février 2008

Pour l'impression c'est pareil :) je vois le rouge qui ne devrais pas y être
Merci pour cette solution :).

Mais j'ai aussi le souci de ma RichTextBox, qui ne s'affiche pas dans la capture d'écran ?? t'aurais une idée ??

Merci pour ton aide.

Manu
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Si tu utilises la méthode DrawToBitmap pour la capture dans ce cas c'est normal..

Essaye la méthode Graphics.CopyFromScreen, elles s'utilise comme ça :

this.BringToFront( ); // Place le contôle au premier plan.


using ( Graphics g = Graphics.FromImage( capture ) )
{
g.CopyFromScreen( src, dst, this.ClientSize );
}

Pour la capture d'écran regardes la source de Sébastien :

http://www.csharpfr.com/codes/CAPTURE-ECRAN-NET-SANS-API_35841.aspx