Ben enfin j'arrive à un résultat, après 2 jours de recherche, faut dire
que je ne connais pas du tout le problème, c'est une première de découper
une image en plusieurs...
Mais j'ai encore de menus problèmes...
D'abord je voudrais dire merci à tous ceux qui m'ont proposé des méthodes
(sauf à ng), j'ai retenu celle de l'API "BitBlt"car elle me semble la plus
simple, l'autre méthode entraîne l'empaquetage d'un dll en sus, et la
dernière avec "call paint machin" (celle de ng justement), ben elle reste
incompréhensible faute de doc... [enfoiré celui-là]!
Je mets mon code, mais ne criez pas, c'est un code de recherche, je
ferais mieux en finalisant, alors voici mes question (à l'exclusion de ng):
-1- L'image numérote depuis 0 ou depuis 1 son unité de mesure ?
-2- Avec l'API "BitBlt" je n'arrive pas à lui passer des twips, elle ne
semble avaler que les pixels, est-ce un état, ou puis-je arriver à lui
passer des twips, et comment (voir mon code), j'ai beau mettre des
scale_machin dans le code, dans la forme, rien n'y fait, y'a que le pixel
qui passe, peut être des paramètres que je n'aurais pas, votre idée (sauf
ng), svp ?
-3- Ben sinon, si vous voyez où je peux mieux faire, avec la même quantité
de code, n'hésitez pas à proposer, merci...
Alors, merci (sauf ng), pour vos lumières ? :o)
teste auto-coupe d'image
'
Option Explicit
Private Declare Function BitBlt Lib "gdi32" ( _
ByVal hDestDC As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal xSrc As Long, _
ByVal ySrc As Long, _
ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020
'
Dim i As Long
Dim j As Long
Dim k As Long
Dim cote As Long
Dim rep
'
Sub Form_Activate()
Picture1.Picture = LoadPicture("ImageOrigine.jpg")
End Sub
Sub Form_Load()
ChDrive App.Path
ChDir App.Path
cote = 1335
i = 1
End Sub
Sub m_decoupe_Click()
' imaged'origine = 617 * 441 pixels pour mémoire
' découpe : 6615(largeur origine) = 5(images) * 1323 twips par image
carrée
' découpe : 9261(hauteur origine) = 7(images) * 1323 twips par image
carrée
'
ScaleMode = 1 'twip
Select Case i
Case 1: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC, 1,
1, SRCCOPY)
Case 2: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC,
85, 0, SRCCOPY)
Case 3: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC,
170, 0, SRCCOPY)
Case 4: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC,
254, 0, SRCCOPY)
Case 5: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC,
338, 0, SRCCOPY)
Case 6: rep = BitBlt(Picture2(i).hDC, 0, 0, cote, cote, Picture1.hDC, 1,
85, SRCCOPY)
End Select
'
i = i + 1
If i > 6 Then
'Set Picture1.Picture = Nothing
Exit Sub
End If
Call m_decoupe_Click
End Sub
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
--
@+, bye, Joe.
Pour m'écrire ng75AROBASEnoosPOINTfr
remplace AROBASE et POINT par leur vrai signe
Il l'a fait car il ne savait pas que c'était impossible, alea jacta est!
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christophe
Bonjour
-2- Avec l'API "BitBlt" je n'arrive pas à lui passer des twips, elle ne semble avaler que les pixels, est-ce un état, ou puis-je arriver à lui passer des twips, et comment (voir mon code), j'ai beau mettre des scale_machin dans le code, dans la forme, rien n'y fait, y'a que le pixel qui passe, peut être des paramètres que je n'aurais pas, votre idée (sauf ng), svp ?
BitBlt : DC de destination, puis Coin Supgauche destination: en coordonnées logique du DC de destination etc ;; et coordonnées logiques dans le DC de départ. Pour que tes coordonnées soient exprimée en twips il faut que le mode de mapping du DC soit MM_TWIPS scalemode=1 Pour que tes coordonnées soient exprimées en pixel il faut que le mode de mapping du DC soit MM_TEXT (une unité logique = une unité de périphérique), ce qui est le plus simple., picture1.scalemode=pixel ou l'api: Private Declare Function SetMapMode& Lib "gdi32" (ByVal hdc As Long, ByVal nMapMode As Long) Si tu veux faire un puzzle comme je te l'ai indiqué dans un post précédent la meilleur méthode reste de gerer une image complete dans un DC en memoire et de gerer l'affichage découpé de cette image sur différent pictureBOX. D'un point de vue code c'est un peu plus ardu mais en efficacité c'est au top. Si tu veux travailler efficacement sur les images tu n'echappera pas aux API.
christophe Vergon
Bonjour
-2- Avec l'API "BitBlt" je n'arrive pas à lui passer des twips, elle ne
semble avaler que les pixels, est-ce un état, ou puis-je arriver à lui
passer des twips, et comment (voir mon code), j'ai beau mettre des
scale_machin dans le code, dans la forme, rien n'y fait, y'a que le pixel
qui passe, peut être des paramètres que je n'aurais pas, votre idée (sauf
ng), svp ?
BitBlt : DC de destination, puis Coin Supgauche destination: en coordonnées
logique du DC de destination
etc ;; et coordonnées logiques dans le DC de départ.
Pour que tes coordonnées soient exprimée en twips il faut que le mode de
mapping du DC soit MM_TWIPS
scalemode=1
Pour que tes coordonnées soient exprimées en pixel il faut que le mode de
mapping du DC soit MM_TEXT (une unité logique = une unité de périphérique),
ce qui est le plus simple., picture1.scalemode=pixel
ou l'api:
Private Declare Function SetMapMode& Lib "gdi32" (ByVal hdc As Long, ByVal
nMapMode As Long)
Si tu veux faire un puzzle comme je te l'ai indiqué dans un post précédent
la meilleur méthode reste de gerer une image complete dans un DC en memoire
et de gerer l'affichage découpé de cette image sur différent pictureBOX.
D'un point de vue code c'est un peu plus ardu mais en efficacité c'est au
top.
Si tu veux travailler efficacement sur les images tu n'echappera pas aux
API.
-2- Avec l'API "BitBlt" je n'arrive pas à lui passer des twips, elle ne semble avaler que les pixels, est-ce un état, ou puis-je arriver à lui passer des twips, et comment (voir mon code), j'ai beau mettre des scale_machin dans le code, dans la forme, rien n'y fait, y'a que le pixel qui passe, peut être des paramètres que je n'aurais pas, votre idée (sauf ng), svp ?
BitBlt : DC de destination, puis Coin Supgauche destination: en coordonnées logique du DC de destination etc ;; et coordonnées logiques dans le DC de départ. Pour que tes coordonnées soient exprimée en twips il faut que le mode de mapping du DC soit MM_TWIPS scalemode=1 Pour que tes coordonnées soient exprimées en pixel il faut que le mode de mapping du DC soit MM_TEXT (une unité logique = une unité de périphérique), ce qui est le plus simple., picture1.scalemode=pixel ou l'api: Private Declare Function SetMapMode& Lib "gdi32" (ByVal hdc As Long, ByVal nMapMode As Long) Si tu veux faire un puzzle comme je te l'ai indiqué dans un post précédent la meilleur méthode reste de gerer une image complete dans un DC en memoire et de gerer l'affichage découpé de cette image sur différent pictureBOX. D'un point de vue code c'est un peu plus ardu mais en efficacité c'est au top. Si tu veux travailler efficacement sur les images tu n'echappera pas aux API.