C# Windows Contrôle de formulaire à l'Image?
Je suis en train de créer une image d'un groupe spécial et de l'enregistrer dans un dossier. Le problème, c'est que le comité dispose de barres de défilement et de l'image générée est uniquement pour la partie visible du Panneau.
Le code que j'utilise est quelque chose comme le Panneau.DrawToImage. Pourrait-il y avoir de l'aide ici pour sauver l'ensemble du groupe comme une image et non pas seulement la partie visible?
OriginalL'auteur Shri | 2009-12-10
Vous devez vous connecter pour publier un commentaire.
Pas de happy réponses ici, DrawToBitmap ne peut tirer de ce qui serait visible à l'utilisateur. Des astuces comme la modification de l'Emplacement et de la Taille du panneau préalablement généralement assez vite à court de gaz en raison de la restriction sur la taille du contrôle imposé par les parents. Le formulaire lui-même ne peut jamais obtenir la taille de l'écran, maintenant, vous allez aussi dépendent de la résolution de la carte vidéo sur la machine cible.
Un vilain hack consiste à exécuter DrawToBitmap plusieurs fois, en changeant le Panneau de propriété AutoScrollPosition entre chaque appel. Vous devez assembler les images qui en résultent ensemble. En accordant une attention particulière à la dernière, bien sûr, car il ne sera pas aussi grand que les autres.
Une fois que vous commencer à envisager de ce code, vous devriez vraiment penser à PrintDocument ou un générateur de rapport au lieu. Un avantage à cela est que l'impression de regarder un heckofalot plus propre. Imprimé aux captures d'écran sont toujours moche à cause de l'énorme différence dans la vidéo et la résolution de l'imprimante.
Hé les gars, Juste une mise à jour sur ce.... Un travail autour de a été pour créer le même contrôle dans la mémoire et de définir la coutume de la hauteur et de la largeur, puis d'appeler la DrawToBitmap fonction!!! A été un succès!! Espérons que cela aide les autres!!
+1 pour PrintDocument
OriginalL'auteur Hans Passant
Je pense que le WM_PRINT message va être utile. Voici un exemple qui presque œuvres. (Elle affiche toujours les barres de défilement eux-mêmes, et le fond est perdu sur la "hors de défilement" des parties.) Peut-être que vous pouvez jouer avec ce et le faire fonctionner, ou quelqu'un avec plus d'WinForms expérience peut prendre cela au niveau suivant?
Déclare ce qui suit dans votre classe:
Alors, pour peindre le contrôle d'une image bitmap:
EDIT: Voici une autre peinture de la stratégie qui pourrait vous obtenir ce que vous cherchez. Je suis en train de faire quelques hypothèses, mais peut-être que ça va fonctionner. Il peint un mannequin de fond sur l'image tout d'abord, et supprime également les barres de défilement:
OriginalL'auteur Dave Mateer
Envisager d'augmenter temporairement le panneau de la taille, en appelant p.Mise en page(), puis p.DrawToImage()
OriginalL'auteur hometoast
Peut-être vous pourriez cloner le contrôle à un autre (caché) forme à la taille désirée (tels que les barres de défilement ne sont pas affichés) et appelez votre
DrawToImage()
fonction de cette façon?OriginalL'auteur Erik Forbes
Hmmm... Cela ressemble (comme vous ne l'ait pas dit dans la question d'origine) mais auriez-vous un picturebox agissant comme un conteneur à l'intérieur du panneau du conteneur, c'est à dire les conteneurs imbriqués?
Avez-vous pas envisagé de faire ceci:
La
Save
méthode de la classe Image a 5 surcharges afin de choisir un à votre convenance.Espère que cette aide,
Meilleures salutations,
Tom.
Oh...Maintenant je comprends...ummm...comment sur Alt+PrtScrn, et de le coller dans mspaint? Ou de quelque autre Écran de saisie de l'outil? En bref, la réponse est non, comme la capture d'écran de ce qui est là, peu importe de savoir si l'image est découpée ou pas!
OriginalL'auteur t0mm13b
Je voudrais créer une image bitmap avec la bonne taille (et de l'effacer avec le bouton droit de la couleur ou de la peinture les panneaux à l'arrière-plan de l'image) et ensuite une boucle sur tous les contrôles enfants et .DrawToImage chacun d'eux à la bonne place.
OriginalL'auteur Dan Byström
vous avez besoin pour faire de votre panneau de
AutoZize=True
etAutoScroll=False
, que de le mettre dans un autre récipient, le récipientAutoScroll=true
.OriginalL'auteur Bolu