Problème capture écran + RichTextBox

Résolu
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008 - 4 avril 2006 à 18:35
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 8 avril 2006 à 12:23
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 avril 2006 à 05:46
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;
}
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
4 avril 2006 à 23:10
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 );
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
4 avril 2006 à 23:13
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 avril 2006 à 00:19
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
5 avril 2006 à 00:21
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
6 avril 2006 à 11:10
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
7 avril 2006 à 08:48
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 ?
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
7 avril 2006 à 08:52
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
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
8 avril 2006 à 09:17
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 avril 2006 à 10:44
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
0
Manu94600 Messages postés 107 Date d'inscription lundi 9 juin 2003 Statut Membre Dernière intervention 20 février 2008
8 avril 2006 à 10:50
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 avril 2006 à 12:23
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
0
Rejoignez-nous