Results 1 to 4 of 4

Thread: Load a certain area of an image file to a PictureBox

  1. #1

    Thread Starter
    Addicted Member
    Join Date
    May 2001
    Location
    Montréal, Québec
    Posts
    195

    Cool The Vb Way!

    Of Course like plendej said, you can use BitBlt (for faster result of course) but your are limited to 1:1 drawing.

    If you don't like Api, you can use the PaintPicture Methd from the picture box. It's something near BitBlt (a bit less effiency, but barely noticeable) but it can stretch pictures, copys part of pictures etc. And The BEST part of it is that is will be "reconize" by the picture box.

    If you use BitBlt to Blt the picturebox some functions of the pictures box may not be working properly (it's said in the msdn) so by using PaintPicture, it's totally compliant!

  2. #2

    Thread Starter
    Addicted Member
    Join Date
    May 2001
    Location
    Montréal, Québec
    Posts
    195
    PaintPicture, méthode


    Dessine le contenu d'un fichier graphique (.bmp, .wmf, .emf, .cur, .ico ou .dib) sur un objet Form, PictureBox ou Printer. Ne gère pas lesarguments nommés.

    Syntaxe

    object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode

    La syntaxe de la méthode PaintPicture comprend les éléments suivants :

    Élément Description
    object Facultatif.Expression d'objet qui prend la valeur d'un objet figurant dans la rubrique Application. Si l'élément object est omis, l'objet Form qui a lefocus est considéré comme object.
    picture Source du graphique à dessiner sur object. Doit correspondre à la propriété Picture d'un objet Form ou PictureBox.
    x1, y1 Valeurs en simple précision indiquant les coordonnées de destination (axes x et y) sur l'élément object pour l'argument picture à dessiner. La propriété ScaleMode de l'élément object détermine l'unité de mesure à utiliser.
    width1 Facultatif. Valeur en simple précision indiquant la largeur de destination de picture. La propriété ScaleMode de l'élément object détermine l'unité de mesure à utiliser. Si la largeur de destination est supérieure ou inférieure à la largeur source (width2), l'argument picture est élargi ou rétréci en conséquence. Si cet élément est omis, la largeur source est utilisée.
    height1 Facultatif. Valeur en simple précision indiquant la hauteur de destination de picture. La propriété ScaleMode de l'élément object détermine l'unité de mesure à utiliser. Si la hauteur de destination est supérieure ou inférieure à la hauteur source (height2), l'argument picture est élargi ou rétréci en conséquence. Si cet élément est omis, la hauteur source est utilisée.
    x2, y2 Facultatif. Valeurs en simple précision indiquant les coordonnées (axes x et y) d'une zone de coupure à l'intérieur de l'argument picture. La propriété ScaleMode de object détermine l'unité de mesure à utiliser. Si cet élément est omis, la valeur par défaut est 0.
    width2 Facultatif. Valeur en simple précision indiquant la largeur source d'une zone de coupure à l'intérieur de l'argument picture. La propriété ScaleMode de object détermine l'unité de mesure à utiliser. Si cet élément est omis, la totalité de la largeur source est utilisée.
    Heightt2 Facultatif. Valeur en simple précision indiquant la hauteur source d'une zone de coupure à l'intérieur de l'argument picture. La propriété ScaleMode de object détermine l'unité de mesure à utiliser. Si cet élément est omis, la totalité de la hauteur source est utilisée.
    opcode Facultatif. Valeur de type Long ou code utilisé uniquement avec lesimages bitmap. Définit une opération au niveau du bit (par exemple, la constante vbMergeCopy ou vbSrcAnd) qui est exécutée sur l'argument picture à mesure qu'il est dessiné sur object. La liste complète des opérateurs au niveau du bit figure dans la rubrique RasterOp, constantes de l'aide de Visual Basic.
    Il existe des limitations à l'utilisation des opcodes. Par exemple, vous ne pouvez pas utiliser un opcode autre que vbSrcCopy si la source est une icône ou un métafichier, et les opcodes qui interagissent avec le motif (ou « brosse », en termes SDK) comme MERGECOPY, PATCOPY, PATPAINT et PATINVERT interagissent en fait avec la propriété FillStyle de la destination.

    Note Opcode est utilisé pour passer une opération au niveau du bit sur un bitmap. Placer une valeur dans cet argument lors du passage d'autres types d'images cause une erreur « Argument ou appel de procédure incorrect ». Ceci est voulu. Pour éviter cette erreur, laissez l'argument Opcode à blanc pour toute autre image d'un bitmap.



    Remarques

    Vous pouvez retourner une image bitmap horizontalement ou verticalement en attribuant des valeurs négatives à la hauteur de destination (height1) et/ou à la largeur de destination (width1).

    Vous pouvez omettre toutargument facultatif situé en fin de syntaxe. Si vous omettez un ou plusieurs arguments facultatifs en fin de syntaxe, n'indiquez pas de virgule après le dernier argument utilisé. Pour définir un argument facultatif, vous devez préciser tous les arguments facultatifs qui le précèdent dans lasyntaxe.

    Notez qu'il existe une différence entre le chargement d'un .Bmp dans un contrôle PictureBox et l'utilisation de la fonction API Windows BitBlt() pour ajouter une image à ce contrôle. Lorsque vous utilisez BitBlt pour afficher une image, le contrôle PictureBox ne sait pas comment la redimmensionner comme il le fait avec la méthode LoadPicture. L'affectation de la taille de l'image aux propriétés ScaleWidth et ScaleHeight ne fonctionne pas. Si vous voulez que le contrôle PictureBox prenne la taille de la nouvelle image après l'emploi de BitBlt, vous devez le traiter manuellement par code, en convertissant les unités et en gérant les bordures. Voici un exemple ci-dessous :

    Sub RedimPictureBoxPourImage(pic as PictureBox, twipWd _
    as Integer, twipHt as Integer)
    ' Ce code suppose que toutes les unités sont en twips.
    ' Si ce n'est pas le cas, effectuez la conversion
    ' en twips avant d'appeler cette routine.
    ' Il suppose aussi que l'image a été placée en 0,0
    Dim BorderHt as Integer, BorderWd as Integer
    BorderWd = Pic.Width - Pic.ScaleWidth
    BorderHt = Pic.Height - Pic.ScaleHeight
    pic.Move pic.Left, pic.Top, twipWd + BorderWd, _
    twipHt + BorderHt
    End Sub



    If you don't understand french, i'll translate what's in bold:

    If you use the BitBlt function to show a picture in a picturebox, the picturebox will not know how to resize the picture as it would if the picture was loaded with the methods of the PictureBox.

    So I think PaintPicture is the best way to resize, and after if you need to select part of the picture WITHOUT changing it, you can use bitblt for faster results cause the original pictures loaded will not be affected in any way.

  3. #3
    Member anjulpa's Avatar
    Join Date
    Aug 2001
    Location
    india
    Posts
    43
    use bitblt and a container control to contain the image without displaying it .

  4. #4
    Good Ol' Platypus Sastraxi's Avatar
    Join Date
    Jan 2000
    Location
    Ontario, Canada
    Posts
    5,134
    Bitblt has a "sister" API, called StretchBlt. That's exactly what it does . It can stretch it and it's faster than paintpicture.
    All contents of the above post that aren't somebody elses are mine, not the property of some media corporation.
    (Just a heads-up)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width