imprimer une image tournee
-
- Messages : 446
- Inscription : mar. 25/mai/2010 17:24
- Localisation : Bnei Brak, Israel
imprimer une image tournee
jai une image a imprimer mais elle est en paysage et je ne veux pas passer par les preferences de limprimante pour la retourner
y a il un moyen de la retourner dans le prog et de limprimer direct?
merci
y a il un moyen de la retourner dans le prog et de limprimer direct?
merci
Re: imprimer une image tournee
Peut-être en effectuant une rotation pixel par pixel?
Re: imprimer une image tournee
C'est la première chose qui m'est venu a l'esprit aussi. Dommage dans les fonctions 2DDrawing tu a DrawRotatedText() qui te permet de tourner du texte.Warkering a écrit :Peut-être en effectuant une rotation pixel par pixel?
ou alors via un sprit ou screen peut être. ?
EDIT :
j'avais un code qui redessiner une image pixel par pixel, j'ai un peut bidouiller, l'image se tourne bien mais elle est inversé

Code : Tout sélectionner
Structure img
x.l
y.l
color.l
inv.l
EndStructure
UseJPEGImageDecoder()
file$ = OpenFileRequester("fichier image", "", "image |*.bmp;*.jpg", 0) ; <---- ont choisit une image bitmap
If LoadImage(1, file$) ; <--- ont charge l'image du dessus
If StartDrawing(ImageOutput(1))
width = ImageWidth(1) ; <--- ont prend la largeur de l'image
height = ImageHeight(1) ; <--- ont prend la hauteur de l'image
size = width * height ; <--- ont multiplie la largeur par la hauteur pour savoir le nombre de pixels au total
Dim Array.img(size)
; <------------------------- ont récupère la couleur de chaque pixel -----------------------
i = 0
For y = 0 To height - 1
For x = 0 To width - 1
color = Point(x, y)
Array(i)\x = x
Array(i)\y = y
Array(i)\color = color
i + 1
Next
Next
; <------------------------------------------------------------------------------------------
StopDrawing()
EndIf
EndIf
If OpenWindow(0, 0, 0, ImageHeight(1), ImageWidth(1), "") ; <------------------------- ont ouvre une fenêtre a la taille de l'image
If CreateImage(0, ImageHeight(1), ImageWidth(1)) ; <------------------------- ont charge l'environnement image
If StartDrawing(ImageOutput(0))
For i = 0 To size - 1
i = 0
For y = 0 To height -1
For x = width -1 To 0 Step -1
i + 1
Plot(Array(i) = y, Array(i) = x, RGB(Red(Array(i)\color), Green(Array(i)\color), Blue(Array(i)\color))) ; <----- ici ont redessine pixel par pixel sur le Drawing()
Next
Next
Next
StopDrawing()
EndIf
EndIf
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
Repeat
EventID = WaitWindowEvent()
Until EventID = #PB_Event_CloseWindow
EndIf
; <------------------------- et ont quitte
@++
Dernière modification par venom le dim. 14/nov./2010 21:43, modifié 1 fois.
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: imprimer une image tournee
Bonjour parole de JOJO
Avec effect de LSI Le Soldat Iconnu
http://www.lsi-dev.com/
Librairie Effect
Index des commandes :
GetImageBits
ImageSymmetryH
ImageSymmetryV
RotateImage
RotateImageEx
SetImageBits
RotateImage()
Syntaxe :
RotateImage(ImageID, Angle.l)
Description :
Rotation d'une image d'un angle multiple de 90°.
Le paramètre ImageID doit recevoir le handle d'une image. Par exemple : UseImage(#Image)
Le paramètre Angle doit recevoir un angle multiple de 90°. Par exemple 90, 180, 270, -90, -180, -270
La fonction retourne l'identifiant de l'image pivotée. (Ne pas confondre Identifiant et Handle)
Exemple :
A+
Avec effect de LSI Le Soldat Iconnu
http://www.lsi-dev.com/
Librairie Effect
Index des commandes :
GetImageBits
ImageSymmetryH
ImageSymmetryV
RotateImage
RotateImageEx
SetImageBits
RotateImage()
Syntaxe :
RotateImage(ImageID, Angle.l)
Description :
Rotation d'une image d'un angle multiple de 90°.
Le paramètre ImageID doit recevoir le handle d'une image. Par exemple : UseImage(#Image)
Le paramètre Angle doit recevoir un angle multiple de 90°. Par exemple 90, 180, 270, -90, -180, -270
La fonction retourne l'identifiant de l'image pivotée. (Ne pas confondre Identifiant et Handle)
Exemple :
Code : Tout sélectionner
ImageNormale = CreateImage(#PB_Any, 80, 100)
StartDrawing(ImageOutput())
Box(0, 0, 80, 100, $6F6F6F)
Box(5, 5, 35, 45, $FF)
Box(40, 5, 35, 45, $FF00)
Box(5, 50, 35, 45, $FF0000)
Box(40, 50, 35, 45, $FFFFFF)
StopDrawing()
If OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget, "Effect - Rotation d'image") = 0 Or CreateGadgetList(WindowID()) = 0
End
EndIf
TextGadget(#PB_Any, 10, 10, 100, 15, "Image normale")
ImageGadget(#PB_Any, 10, 25, 0, 0, UseImage(ImageNormale))
TextGadget(#PB_Any, 120, 10, 100, 15, "Rotation de 90°")
ImageRotation90 = RotateImage(UseImage(ImageNormale), 90) ; ou -270°
ImageGadget(#PB_Any, 120, 25, 0, 0, UseImage(ImageRotation90))
TextGadget(#PB_Any, 10, 135, 100, 15, "Rotation de 180°")
ImageRotation180 = RotateImage(UseImage(ImageNormale), 180) ; ou -180°
ImageGadget(#PB_Any, 10, 150, 0, 0, UseImage(ImageRotation180))
TextGadget(#PB_Any, 120, 135, 100, 15, "Rotation de 270°")
ImageRotation270 = RotateImage(UseImage(ImageNormale), 270) ; ou -90°
ImageGadget(#PB_Any, 120, 150, 0, 0, UseImage(ImageRotation270))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: imprimer une image tournee
.................
Dernière modification par Backup le dim. 20/mars/2011 13:41, modifié 1 fois.
Re: imprimer une image tournee
Et PAF! Maître Dobro a encore frappé un gros coup de sa Connaissance! 

Re: imprimer une image tournee
Bonjour Dobro
Erreur sur le prg ligne 68 point(x,y) en dehors de l'image
j'ai corrigé comme cela :
Erreur sur le prg ligne 68 point(x,y) en dehors de l'image
j'ai corrigé comme cela :
Code : Tout sélectionner
; Rotation d'image sans Librairie :)
;
; utilisation :
; rotate_image(#image2,largeur,hauteur,angle_degres)
;
; Citation:
;
;
;Rotate image
; codé par Dobro
; en purebasic 4.00
Declare rotate_image(id,x,Y,degres)
UseJPEGImageDecoder()
InitSprite()
#dobro=1
#Police=1
#Sprite=1
#image1=1
#image2=2
Structure image
x.l
Y.l
EndStructure
Global Dim image.image(1)
; ***********************************
fontid=LoadFont(#Police,"arial",50,#PB_Font_Bold)
EcranX=GetSystemMetrics_(#SM_CXSCREEN): ;=largeur de l'ecran
EcranY=GetSystemMetrics_(#SM_CYSCREEN): ;=hauteur de l'ecran
windowid=OpenWindow(1,0,0,EcranX,EcranY,"hello",#PB_Window_BorderLess | #PB_Window_ScreenCentered)
windowid=WindowID(1)
Result=OpenWindowedScreen(windowid,0,0,EcranX,EcranY,1,0,0)
; principe de rotation
;x1 = coordonée x du point rotationé
;Y1= coordonée y du point rotationé
; a = angle de rotation
; x1 = x * Cos(a) + Y * Sin(a);
; y1 = -x * Sin(a) + Y * Cos(a)
;NomFichier$ = OpenFileRequester("charge image (pas tros grosse !!)","*.jpg", "*.jpg",0)
; NomFichier$="logo2.jpg"
NomFichier$="L:\program files\images\pinguin.jpg"
LoadImage(#image1,NomFichier$) ;<----- path of the picture
largeur=ImageWidth(#image1)
hauteur=ImageHeight(#image1)
CreateImage(#image2,largeur,hauteur)
Global Dim tabl1(largeur,hauteur)
; ******* mise en tableau de l'image **********
StartDrawing(ImageOutput(#image1) )
; For Y=1 To hauteur
; For x=1 To largeur
; tabl1(x,Y)=Point(x,Y)
; Next x
; Next Y
For Y=0 To hauteur-1
For x=0 To largeur-1
tabl1(x,Y)=Point(x,Y)
Next x
Next Y
StopDrawing()
;*****************************************************
Resultat=InitMouse()
Repeat
ExamineMouse()
Event=WindowEvent()
Delay(2)
angle_degres=angle_degres+2:If angle_degres>360:angle_degres=1:EndIf
rotate_image(#image2,largeur,hauteur,angle_degres)
; ****** **on affiche l'image ********
StartDrawing(ScreenOutput())
DrawImage(ImageID(#image2),1,1)
StopDrawing()
; *******************************
FlipBuffers(): ; affiche l'ecran
ClearScreen(RGB(0,0,0)) : ;efface l'ecran
Event=WindowEvent()
;}
If MouseButton(2)
End
EndIf
Until Event=#PB_Event_CloseWindow
Procedure rotate_image(id,x2,y2,degres)
;id = id picture
;x2=Width
;y2=Height
;degres=rotation in degres
; *** Merci Comtois : D *********
;x' = x0 + (x-x0)*cos(A) + (y-y0)*sin(A)
;Y' = y0 - (x-x0)*sin(A) + (y-y0)*cos(A)
x3=x2/2 ; le milieu x de l'image
y3=y2/2 ; le milieu y de l'image
StartDrawing(ImageOutput(id) )
For Y=0 To y2-1
For x=0 To x2-1
; ********* voici la formule de la rotation d'image *********
image(1)\x=x3+(x-x3)*Cos(degres*#PI/180)+(Y-y3)*Sin(degres*#PI/180)
image(1)\Y=y3-(x-x3)*Sin(degres*#PI/180)+(Y-y3)*Cos(degres*#PI/180)
;*****************************************************
; *** on evite que les coordonée sorte du tableau dim ****
If image(1) \Y<0:image(1) \Y=0:EndIf
If image(1)\Y>y2:image(1) \Y=y2:EndIf
If image(1)\x>x2:image(1)\x=x2:EndIf
If image(1)\x<0:image(1)\x=0:EndIf
; *****************************************
Plot(x,Y,tabl1(image(1)\x,image(1)\Y)) ; on dessine l'image rotaté a l'aide du tableau de points : D
Next x
Next Y
StopDrawing()
EndProcedure
A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Re: imprimer une image tournee
Merci
c'est vrais que j'avais pas eu le temps de tester avant envoie !
ce code date d'une ancienne version de Purebasic , ou nous pouvions
"ploter" jusqu'au X,Y
depuis la version 4.00 je crois, nous devons "ploter" jusqu'au X-1,Y-1
j'ai corrigé mon code coloré ci dessus , et ajouté un openfilerequester (c'est plus cool)

c'est vrais que j'avais pas eu le temps de tester avant envoie !
ce code date d'une ancienne version de Purebasic , ou nous pouvions
"ploter" jusqu'au X,Y
depuis la version 4.00 je crois, nous devons "ploter" jusqu'au X-1,Y-1
j'ai corrigé mon code coloré ci dessus , et ajouté un openfilerequester (c'est plus cool)

Re: imprimer une image tournee
Tourner une image n'est pas très compliqué.
tu part de l'image A qui admettons fait 800x600
et tu veut faire une rotation de 90°
le résultat sera dans l'image B qui fera 600x800
Voila
tu part de l'image A qui admettons fait 800x600
et tu veut faire une rotation de 90°
le résultat sera dans l'image B qui fera 600x800
- Créer la nouvelle image à la bonne taille
copier chaque pixel de l'image A dans un tableau dim Pixel(800,600)
-Pour chaque pixel dans le tableau Pixel()
-Calculer la distance par rapport au centre ( dist.f = sqr( (PixelX - (800/2))^2 + (PixelY - (600/2))^2 )
-Recalculer la nouvelle position du pixel selon la distance par rapport au centre et selon l'angle de rotation:
nX.f = PixelX + Distance * cos(Angle * #PI/180)
nY.f = PixelY + Distance * sin(Angle * #PI/180)
Voila

-
- Messages : 446
- Inscription : mar. 25/mai/2010 17:24
- Localisation : Bnei Brak, Israel
Re: imprimer une image tournee
merci bcp
je vais etudier tout ca
je vais etudier tout ca
-
- Messages : 446
- Inscription : mar. 25/mai/2010 17:24
- Localisation : Bnei Brak, Israel
Re: imprimer une image tournee
le seul code qui a marche est celui de venom mais il affiche l'image a l'envers
qu'est ce qu'il faut faire pour la mettre normalement?
qu'est ce qu'il faut faire pour la mettre normalement?
Re: imprimer une image tournee
la mettre à l'endroit... 
suivant l'axe , remplace :

suivant l'axe , remplace :
parFor x = 0 To width -1
For x = width -1 to 0 step -1
-
- Messages : 446
- Inscription : mar. 25/mai/2010 17:24
- Localisation : Bnei Brak, Israel
Re: imprimer une image tournee
ca m'affiche un message d'erreur
-
- Messages : 446
- Inscription : mar. 25/mai/2010 17:24
- Localisation : Bnei Brak, Israel
Re: imprimer une image tournee
ca marche
merci bcpppppp
merci bcpppppp