Copier le contenu d'une partie d'une PicBox ailleurs dans la même PicBox

Messages postés
479
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
15 mai 2019
- - Dernière réponse : JeuDuTaquin
Messages postés
23
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
16 mai 2019
- 16 mai 2019 à 15:39
Bonjour,
Je ne parviens pas à copier le contenu d'une partie d'une PicBox ailleurs dans la même PicBox.
Alors j'ai fait cet exemple très simple (dans le code définitif j'utiliserai getpixel/setpixel au lieu de point/pset)
    Graph.Line (0, 0)-(100, 50), Dimensions, BF

  PixelX = Graph.Width / Screen.TwipsPerPixelX / Graph.ScaleWidth ' Pixels par mm
  PixelY = Graph.Height / Screen.TwipsPerPixelY / Graph.ScaleHeight ' Pixels par mm

    For i = 0 To 100 * PixelX 
        For j = 0 To 50 * PixelY
            Graph.PSet (i, j + 100), Graph.Point(i, j)
        Next j
    Next i
La première instruction dessine dans le coin supérieur gauche une boîte de 100 x 50 dans l'unité définie par Scalemode qui est le millimètre.
Ensuite les 2 boucles for copient chaque pixel 100 pixels plus bas, j'obtiens ceci

Le rectangle copié est plus petit que l'original, je ne comprends pas pourquoi, qui peut m'aider à résoudre ce mystère ?
Afficher la suite 

Votre réponse

1 réponse

Messages postés
23
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
16 mai 2019
0
Merci
Salut Hervé,

C'est le type de question piège sur VB5 et VB6.

Non, rien de surprenant sur ce problème, récurant sur Visual Basic, car le graphisme et clairement le point faible de ce language.
Avec les problèmes de "Picture", "Picture.image" et "autoredraw"… on tourne souvent en rond avec des problèmes d'affichage et autres fonctions qui ne fonctionnent qu'une fois.

Ici (dans ton exemple), il faut que tu gardes à l'esprit qu'il y a plusieurs "ScaleMode" !

Le principale en "Forme", et celui de la "PictureBox".
Celui en "FORME" restera en "Twip" (car tu recalcules ton ratio grâce à "Screen.TwipsPerPixelX" et celui de ta "PictureBox" qui sera en "pixels".
En deux mots:
forme en Twips : Picture en Twips, on a un ratio de 1.
forme en Twips : Picture en Twips*Screen.TwipsPerPixelX, on a un ratio en pixels.("pset" et "point" utilisent le pixel)

Donc, ton code est bon, mais il faut paramètrer ta forme en "Twip" et ta "picturebox" en "Pixel", car tu as un ratio qui est donné en pixels par "twip".
Tu mets le tout en "Autoredraw", et la taille sera respectée.

Je suppose que tu as testé la fonction "Graph.paintpicture", mais son utilisation est très particulre, et est liée à un paramétrage particulier de la Forme et des PictureBox, vis à vis des Autoredraw, des mis à jour des PictureBox.image et autre manipulation des buffers images/pictures … qui compliques tout !
Commenter la réponse de JeuDuTaquin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.