Come si disegna un cerchio e una linea nella casella immagine?Come si disegna un cerchio e una linea nella casella immagine?
risposta
il picturebox è un controllo e ha un'immagine come fonte - in modo da avere per disegnare sull'immagine e la mano l'immagine al controllo di mostrarlo
MyImage = new Bitmap(fileToDisplay);
pictureBox1.ClientSize = new Size(xSize, ySize);
pictureBox1.Image = MyImage;
Il modo migliore è quello di non disegnare un cerchio e la linea in un picturebox! Non è progettato per quello scopo.
Da GDI di Bob Powell + blog:
La radice di questo problema è che le regole fondamentali di finestre programmazione sono stati rotti. E come conseguenza della casella immagine, viene accusato di qualcosa che non è proprio colpa sua. Per spiegare meglio il motivo , i quattro punti seguenti descrivono cosa non funziona in questo caso.
Il controllo PictureBox serve per la visualizzazione delle immagini. Non è un segnaposto pratico per una superficie grafica.
Windows è un sistema basato su eventi in cui ogni evento deve essere servito nel contesto corretto e gli eventi destinati a gestire il clic del pulsante o gli eventi di spostamento del mouse non devono essere utilizzati per disegnare sullo schermo o altre cose strane.
Il PictureBox si aggiorna disegnando dell'oggetto in base System.Drawing.Image conservato nella sua proprietà Image. Se non ci sono immagini, mostrerà il colore di sfondo.
Rubare e attingere all'oggetto grafico da qualsiasi controllo non è una buona pratica, dovrebbe essere fortemente scoraggiato e infrange le regole di gestione degli eventi nel posto giusto al momento giusto. Fondamentalmente se lo fai causerai dolore. Quando sbatti la testa contro un muro, ti provoca dolore. questo è un segno che dovresti smettere di farlo. È lo stesso per la chiamata a PictureBox.CreateGraphics.
Il modo giusto per farlo.
Seguire le regole del sistema guidato da eventi è semplice ma richiede un po 'di accortezza . Quindi, se vuoi disegnare un po 'di grafica e mantenerla lì quando una finestra si sposta di fronte a esso e via di nuovo o quando riduci e riduci, devi eseguire il servizio l'evento Paint di qualunque oggetto esso sia che desideri dipingere. PictureBox porta con sé un bagaglio inutile per questo tipo di applicazione. Se si desidera disegnare qualcosa in una posizione , disegnarla nel modulo rispondendo all'evento Form.Paint. Se si desidera un segnaposto utile per un elemento grafico che funzioni all'interno di un set di limiti , utilizzare un controllo Panel e il relativo servizio Paint. Se si desidera che duplichi ripetutamente un'immagine per l'immagine aziendale, creare un controllo e eseguire il disegno nell'override di OnPaint.
collegamento originale (non più valido): http://bobpowell.net/picturebox.htm
NOTA: Il link originale al blog di Bob Powell non è più funzionale. L'ho lasciato qui per scopi storici. Il contenuto della pagina può ancora essere visualizzato nell'archivio Internet (https://web.archive.org/web/20120330003635/http://bobpowell.net/picturebox.htm) alla data di modifica di questo post.
+1 Questa è davvero la risposta corretta. Grazie per il link, che descrive il problema di root. – Sabuncu
-1 "Linkrot" ... e questa risposta fornisce alcuni suggerimenti su quale sia il problema o cosa invece fare. "I collegamenti a risorse esterne sono incoraggiati, ma per favore aggiungi un contesto intorno al link in modo che i tuoi utenti possano avere un'idea di cosa sia e perché è lì. Cita sempre la parte più rilevante di un link importante, nel caso il sito target sia irraggiungibile o va permanentemente offline. " Fonte: http://stackoverflow.com/help/how-to-answer Ho tuttavia trovato le pagine bobpowell conservate nella "Wayback Machine": https://web.archive.org/web/20120216111903/http: //bobpowell.net/picturebox.htm –
Questa è una risposta terribile. Le pagine (altrimenti grandiose) di bobpowell non sono solo sparite ma non suggeriscono in alcun modo che non dovresti disegnare su un PictureBox. In effetti il loro DoubleBuffering predefinito lo rende l'unico controllo adatto per il disegno fuori dalla scatola. Bob si limita a mettere in guardia dall'usare la 'Control.CreateGraphics' pronta per la copia di tutti i neofiti dalla terribile pagina di esempio di MSDN. – TaW
o:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.DrawLine(
new Pen(Color.Red,2f),
new Point(0,0),
new Point(pictureBox1.Size.Width, pictureBox1.Size.Height));
e.Graphics.DrawEllipse(
new Pen(Color.Red, 2f),
0,0, pictureBox1.Size.Width, pictureBox1.Size.Height );
}
Gestisci l'evento vernice della finestra immagine e fai il disegno personalizzato lì.
- 1. Come si disegna una linea su iPhone?
- 2. Disegna un cerchio su una vista (Android)
- 3. UIBezierPath disegna un cerchio con tratti diversi
- 4. Disegna una linea liscia
- 5. Disegna una linea parallela
- 6. Disegna un cerchio in una tela con più colori sfumati
- 7. Disegna un cerchio vuoto in SVG
- 8. Richtextbox disegna una linea rtf
- 9. Come si disegna una linea utilizzando Cocos2D-X?
- 10. Python, Disegna un cerchio con PIL
- 11. Disegna un cerchio semplice in XNA
- 12. Disegna testo in sovrapposizione cerchio
- 13. Disegna un cerchio su un'immagine esistente
- 14. come disegnare disegni nella casella di immagine
- 15. Come si disegna una freccia 3D in R?
- 16. Disegna una linea con un angolo specifico in Java
- 17. as3: disegna un cerchio con un foro usando solo ActionScript
- 18. Disegna una linea in Python Mayavi
- 19. Disegna una linea di collegamento in RaphaelJS
- 20. Disegna un'altra immagine su una UIImmagine
- 21. Come si traccia una linea in VIM?
- 22. Disegna cerchio liscio nel kit sprite iOS
- 23. Disegna linea tratteggiata in un decoratore WPF
- 24. Disegna rettangolo/cerchio e triangolo in Spritekit con due colori. . .
- 25. Come si disegna una linea usando il vettore di peso in un Perceptron lineare?
- 26. Come si disegna una linea su un ambiente a figure multiple in R?
- 27. GDI +: come si disegna una linea lunga un pollice su qualsiasi dispositivo su cui è disegnata?
- 28. Bordi arrotondati nella casella immagine C#
- 29. Come posso rendere selezionabile una casella immagine?
- 30. Android EditText disegna una linea divisoria tra il suo drawable e il suo testo
Disegna __ in una bitmap__, non __ sulla picturebox__. Funziona ma è qualcosa di completamente diverso! – TaW