J'utilise StretchImage parce que la boîte est redimensionnable avec des séparateurs. Il semble que le défaut soit un filtrage bilinéaire régulier, ce qui rend mon image floue et moirée.Comment faire pour que PictureBox utilise le rééchantillonnage du plus proche voisin?
Répondre
je avais besoin de cette fonctionnalité aussi. J'ai fait une classe qui hérite PictureBox, remplace OnPaint
et ajoute une propriété pour permettre le mode d'interpolation à définir:
/// <summary>
/// Inherits from PictureBox; adds Interpolation Mode Setting
/// </summary>
public class PictureBoxWithInterpolationMode : PictureBox
{
public InterpolationMode InterpolationMode { get; set; }
protected override void OnPaint(PaintEventArgs paintEventArgs)
{
paintEventArgs.Graphics.InterpolationMode = InterpolationMode;
base.OnPaint(paintEventArgs);
}
}
Très bien. Je pense que PanAndZoomPictureBox d'EmguCV fait la même chose. Connaissez-vous un problème de performance? – Pedro77
Je n'ai eu aucune différence de performance mesurable modifiant le mode d'interpolation de cette manière. – JYelton
Humm bien. Jared Updike devrait marquer votre réponse! :) – Pedro77
Je suppose que vous allez devoir effectuer manuellement le redimensionnement à travers la classe Image et la fonction DrawImage et répondre aux événements de redimensionnement sur le PictureBox.
Lors du redimensionnement d'une image en .net, le System.Drawing.Drawing2D.InterpolationMode offre les méthodes suivantes: redimensionner
- bicubique
- bilinéaire
- Haute
- HighQualityBicubic
- HighQualityBilinear
- Basse
- La plus proche eighbor
- Par défaut
Je ne vois pas comment cela répond à la question de l'OP. – JYelton
je fait une recherche MSDN et se révèle qu'il ya un article sur ce sujet, ce qui est pas très détaillée, mais donne un aperçu que vous devez utiliser l'événement de peinture.
http://msdn.microsoft.com/en-us/library/k0fsyd4e.aspx
J'ai effectué un exemple d'image couramment disponible zoom pour utiliser cette fonctionnalité, voir ci-dessous
Sous la direction de: http://www.dotnetcurry.com/ShowArticle.aspx?ID=196&AspxAutoDetectCookieSupport=1
Hope this helps
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = new Bitmap(Image.FromFile(@"C:\images\TestImage.bmp"));
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.SizeMode = PictureBoxSizeMode.StretchImage;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
SetPictureBoxSize();
// reduce flickering
this.DoubleBuffered = true;
}
// picturebox size changed triggers paint event
private void SetPictureBoxSize()
{
Size s = new Size(Convert.ToInt32(imgOriginal.Width * zoomSlider.Value), Convert.ToInt32(imgOriginal.Height * zoomSlider.Value));
picBox.Size = s;
}
// looks for user trackbar changes
private void trackBar1_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
SetPictureBoxSize();
}
}
// redraws image using nearest neighbour resampling
private void picBox_Paint_1(object sender, PaintEventArgs e)
{
e.Graphics.InterpolationMode = InterpolationMode.NearestNeighbor;
e.Graphics.DrawImage(
imgOriginal,
new Rectangle(0, 0, picBox.Width, picBox.Height),
// destination rectangle
0,
0, // upper-left corner of source rectangle
imgOriginal.Width, // width of source rectangle
imgOriginal.Height, // height of source rectangle
GraphicsUnit.Pixel);
}
Quel événement est connecté à votre méthode picBox_Paint_1? ce serait dans une autre partie de votre code. –
Ouais c'est dans le code du concepteur de formulaire: this.picBox.Paint + = new System.Windows.Forms.PaintEventHandler (this.picBox_Paint_1); – ardunn
- 1. Algorithme d'interpolation du plus proche voisin dans MATLAB
- 2. Vendeur itinérant - le plus proche voisin vs génétique DEATHMATCH
- 3. Mise à l'échelle de la texture "pixelly" du plus proche voisin dans Cocos2d?
- 4. Comment arrondir à 0.5 le plus proche?
- 5. JQuery le plus proche() aider
- 6. Aligner sur le marqueur le plus proche
- 7. Recherche du nombre le plus proche dans un tableau
- 8. Comment faire pour que HttpURLConnection utilise un proxy?
- 9. Comment router vers le serveur RMI le plus proche?
- 10. Arrondi au 100 le plus proche
- 11. élément le plus proche par id
- 12. jquery le plus proche() en sélectionnant
- 13. Arrondir au plus proche cinq
- 14. Arrondi Mécanisme pour le plus proche de 0,05
- 15. Comment trouver l'arbre le plus proche d'un autre arbre?
- 16. tour à .25 le plus proche javascript
- 17. comment faire pour qu'une page utilise ssl?
- 18. Trouver le serveur le plus proche dans le réseau
- 19. Comment faire pour que git-svn utilise une branche svn particulière en tant que dépôt distant?
- 20. obtenir le résultat le plus proche dans IFNULL
- 21. VB6 PictureBox Mouseover
- 22. arrondir le nombre à 0.2 le plus proche avec PHP
- 23. jQuery ID le plus proche de ma liste
- 24. Est-il possible que jQuery appelle les frères et soeurs d'un élément le plus proche?
- 25. Traversant td/tr avec le plus proche de jquery()
- 26. Arrondi au plus proche Ending Digits
- 27. Trier par la date la plus proche
- 28. Built in. Algorithme .Net pour arrondir la valeur à l'intervalle 10 le plus proche
- 29. Utilisation de la commande la plus proche du succès dans le callback ajax
- 30. Comment faire pour que l'agent de test de charge Visual Studio utilise les serveurs deuxième processeur
donc il n'y a aucun moyen réel de le faire? d'une certaine manière facile? – Luiscencio
@Luiscencio: c'est à quoi ça ressemble. Vous devrez le faire vous-même avec un nouveau bitmap de la taille appropriée et ensuite Graphics.DrawImage –
Vous devriez marquer la réponse de JYelton. :) – Pedro77