2009-09-04 8 views
1

Si je voulais rogner une image dans VB.net, comment procéderais-je? J'essaye de laisser l'utilisateur faire glisser la boîte qu'ils veulent (system.drawing.rectangle), et il enlèvera automatiquement les bords entourant la boîte.Utilisation de System.Drawing pour créer un outil de sélection et recadrage d'une image dans vb.net

Mon premier problème est principalement le fait que je ne peux pas rendre le system.drawing.rectangle visible. Il ne s'affiche pas du tout, je suis en train de définir son emplacement et sa hauteur par programmation, mais rien ne s'affiche. Je sais qu'il y a probablement quelque chose d'assez évident qui me manque ... mais je n'arrive pas à le trouver.

Mon plus gros problème, cependant, réside dans le recadrage lui-même. Je ne trouve aucune méthode de culture, du tout. Y a-t-il un caché qui me manque? Ou dois-je le coder moi-même? Comment ferais-je cela? Il devrait être capable de sortir vers un objet image bitmap.

Merci pour l'aide, je suis surpris cela n'a pas été posée ici avant ....

Répondre

1

En ce qui concerne votre premier problème: un rectangle est pas en soi visible. Vous devez le dessiner sur votre canevas à l'aide de la méthode DrawRectangle (...) de l'objet Graphics. Pour dessiner un outil de sélection, vous devez définir les propriétés DashCap et DashPattern de votre objet Pen. Pour "rogner" une image, vous voulez essentiellement prendre la partie d'une image plus grande délimitée par un rectangle plus petit, et le transformer en un nouveau bitmap. Cela peut être fait en utilisant l'une des 30 surcharges de la méthode DrawImage (...) de l'objet Graphics. Vous pouvez soit garder la partie recadrée dans ses dimensions d'origine (résultant en un bitmap plus petit que votre original), ou vous pouvez "faire exploser" à quelque chose comme la taille de l'image originale. Si vous faites cette dernière approche, c'est généralement une bonne idée de définir la propriété InterpolationMode de votre objet Graphics sur HighQualityBicubic (je pense que c'est celui-ci, de toute façon), car le mode InterpolationMode par défaut est assez nul.

Il existe plusieurs façons de rendre des images dans .Net - il pourrait être utile de publier une partie de votre code, ainsi qu'une explication des problèmes que vous rencontrez.

Here is another answer avec un lien vers un exemple d'application (et le code source en C#, désolé) qui peut vous aider à démarrer.

+0

Okay, j'ai résolu le recadrage, comment faire pour que le dessin rectangle fonctionne dans plus d'une direction? Il ne fait que dessiner en bas à droite de la souris, ce qui n'a aucun sens pour moi. J'ai aussi dû calculer pour le décalage de la fenêtre, et le décalage de la souris (4,30), et maintenant je suis coincé pour faire fonctionner cette partie suivante. – Cyclone

+0

@Cyclone: ​​vous pourriez vouloir publier du code, car je ne sais vraiment pas sur quel type de surface vous dessinez, ou comment vous affichez votre Bitmap. Je suppose que vous stockez le point à partir de votre événement MouseDown (emplacement électronique), puis dans chaque événement MouseMove vous créez un nouveau rectangle à l'aide de l'emplacement e.Location de l'événement MouseDown et la différence entre le e. Emplacement à partir de MouseMove et de l'original, puis dessin de ce rectangle. – MusiGenesis

+0

@Cyclone: ​​vous ne pouvez pas spécifier de valeurs négatives pour la largeur et la hauteur dans un rectangle (en fait vous pouvez, mais rien ne sera dessiné), vous devez donc écrire un petit code logique pour gérer un mouvement vers le haut et vers la gauche (Dans ce cas, vous utiliserez à la place l'emplacement e.Location de l'événement MouseMove pour l'emplacement du rectangle, puis calculerez la largeur en soustrayant les valeurs e.Location [MouseDown] x et y de e.Location [MouseMove]. – MusiGenesis

0

Il y a un certain nombre d'articles sur ces sujets CodeProject:

Choisissez le votre saveur préférée (bien que je vous encourage à vérifier les projets C# - il ne devrait pas être trop difficile à convertir).

VB
Image Cropping with Image Resizing Using vb.net

C#
Cropping Images An Easy to Use Image Resizing and Cropping Control
Image Processing using C# (voir la section Recadrage - j'ai pu utiliser ce code dans l'un de mes projets)

WPF/C#
WPF Interactive Image Cropping Control
A Photoshop-like Cropping Adorner for WPF

+0

J'ai essayé le VB, il n'a pas réussi à recadrer l'image que j'ai sélectionnée. – Cyclone

+0

Avez-vous reçu une erreur? Comment cela a-t-il échoué?J'ai lié un certain nombre d'exemples de code qui font ce que vous devez faire - avez-vous essayé d'étudier comment ces auteurs ont accompli ce que vous devez faire et adapté leurs techniques à votre propre code? –

+0

Il n'était pas recadré de/vers les emplacements corrects, en fait, il était généralement recadrage plutôt aléatoire, semblait-il. – Cyclone

Questions connexes