Impression en paysage
Impression en paysage
Bonjour
je voudrais imprimer directement du programme en utilisant la biblioteque printer
le probleme est que je dois imprimer en paysage et je cherche un moyen de le faire automatiquement sans que l'utilisateur doisse passer par les preferences de l'imprimante a chaque fois
merci
je voudrais imprimer directement du programme en utilisant la biblioteque printer
le probleme est que je dois imprimer en paysage et je cherche un moyen de le faire automatiquement sans que l'utilisateur doisse passer par les preferences de l'imprimante a chaque fois
merci
Procédure qui tourne une image d'un quart de tour. (Tirée du forum anglais)
Code : Tout sélectionner
Procedure RotateImage(ImageNumber.I)
Protected Result.I
Protected Width.I
Protected Height.I
Protected Temp.I
Protected *Ptr
Protected SoI.I
SoI = SizeOf(INTEGER)
*Ptr = AllocateMemory(6 * SoI)
Height = ImageHeight(ImageNumber)
Width = ImageWidth(ImageNumber)
If Height > Width
Temp = CreateImage(#PB_Any, Height, Height)
Else
Temp = CreateImage(#PB_Any, Width, Width)
EndIf
PokeI(*Ptr, Height): *Ptr + SoI
PokeI(*Ptr, 0): *Ptr + SoI
PokeI(*Ptr, Height): *Ptr + SoI
PokeI(*Ptr, Width): *Ptr + SoI
PokeI(*Ptr, 0): *Ptr + SoI
PokeI(*Ptr, 0): *Ptr + SoI
DC = StartDrawing(ImageOutput(Temp) )
DrawImage(ImageID(ImageNumber),0,0)
PlgBlt_(DC, *Ptr - (6 * SoI), DC, 0, 0, Width, Height, 0, 0, 0)
StopDrawing()
If ImageNumber > 99999
FreeImage(ImageNumber)
Result = GrabImage(Temp, -1, 0, 0, Height, Width)
Else
Result = GrabImage(Temp, ImageNumber, 0, 0, Height, Width)
EndIf
FreeImage(Temp)
ProcedureReturn Result
EndProcedure
;**************
; Test
;**************
For I = 0 To 1
Img = CreateImage(#PB_Any, 256, 16)
StartDrawing(ImageOutput(Img) )
Box(0, 0, 256, 16, #Blue)
DrawText(0, 0, "Cliquez sur ce message...", #White, #Blue)
StopDrawing()
If I = 1
RotateImage(Img) ; *************
EndIf
WW = ImageWidth(Img)
HH = ImageHeight(Img)
OpenWindow(0, 0, 0, WW, HH, "", $80000001)
ImageGadget(0, 0, 0, WW, HH, ImageID(Img) )
Repeat
Until WaitWindowEvent() = #PB_Event_Gadget
CloseWindow(0)
FreeImage(Img)
Next I
End
ici aussi il y avait une procedure pour ça !! 
en fait il y en a meme plein !!
bon la mienne
image a rotationner
cependant une impression en mode Paysage (a la française)
ce n'est pas une rotation d'image !!
c'est une rotation de la Feuille , mais pas de l'ecriture !!
il n'y aurai pas un code style code EPSON pour ce genre de truc ?

en fait il y en a meme plein !!

bon la mienne
image a rotationner

Code : Tout sélectionner
;Rotate image
; codé par Dobro
; en purebasic 4.00
Declare rotate_image(id,x,Y,degres)
Structure image
x.l[1024]
Y.l[768]
EndStructure
Global Dim image.image(360)
Global Dim tabl1(1024,768 )
UseJPEGImageDecoder ()
InitSprite ()
#dobro =1
#Police =1
#Sprite =1
#image1 =1
#image2 =2
; ***********************************
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)
LoadImage ( #image1 , "logo2.jpg" ) ;<----- path of the picture
largeur = ImageWidth(#image1)
hauteur = ImageHeight(#image1)
CreateImage ( #image2 ,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
StopDrawing ()
;*****************************************************
Resultat = InitMouse ()
Repeat
ExamineMouse ()
Event= WindowEvent ()
Delay (2)
angle_degres=angle_degres+5 :If angle_degres>360:angle_degres=1:EndIf
rotate_image(#image2,largeur, hauteur, angle_degres) ; rotate a Dobro
; ****** **on affiche l'image ********
StartDrawing ( ScreenOutput ())
DrawImage ( ImageID ( #image2 ), 100, 100); rotate a Dobro
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)
x3=x2/2
y3=y2/2
StartDrawing ( ImageOutput ( id ) )
For Y=1 To y2
For x=1 To x2
; ********* voici la formule de la rotation d'image *********
image(degres)\x[x]= x3+(x-x3) * Cos (degres* #PI /180) +( Y-y3)* Sin (degres* #PI /180)
image(degres)\Y[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(degres) \Y[Y] <0 : image(degres) \Y[Y]=y2-image(degres) \Y[Y] : EndIf
If image(degres)\Y[Y] >y2 : image(degres) \Y[Y] =0+image(degres)\Y[Y] -y2: EndIf
If image(degres)\x[x]>x2 : image(degres)\x[x]=0+image(degres)\x[x]-x2: EndIf
If image(degres)\x[x]<1 : image(degres)\x[x]=x2-image(degres)\x[x]: EndIf
; *****************************************
Plot (x,Y,tabl1( image(degres)\x[x],image(degres)\Y[Y])) ; on dessine l'image rotaté a l'aide du tableau de points : D
Next x
Next Y
StopDrawing ()
EndProcedure
ce n'est pas une rotation d'image !!
c'est une rotation de la Feuille , mais pas de l'ecriture !!
il n'y aurai pas un code style code EPSON pour ce genre de truc ?
Dernière modification par Backup le mar. 26/mai/2009 17:39, modifié 3 fois.
gdiplus
bonjour
si tu est sous Windows je pense que la meilleur solution
c'est le GDI+ malgré sa lenteur! c'est tout de même bien.
voir la documentation remarquable de Denis sur le sujet à ce post:
http://www.purebasic.fr/french/viewtopi ... ht=gdiplus
au revoir
si tu est sous Windows je pense que la meilleur solution
c'est le GDI+ malgré sa lenteur! c'est tout de même bien.
voir la documentation remarquable de Denis sur le sujet à ce post:
http://www.purebasic.fr/french/viewtopi ... ht=gdiplus
au revoir
Merci tout le monde
Merci tout le monde
Mais j'utilise la version 4.20 et les deux procedures ne marchent pas
que faire
merci encore et bonsoir
Mais j'utilise la version 4.20 et les deux procedures ne marchent pas
que faire
merci encore et bonsoir
@Rakiya
Quelles erreurs tu vois apparaître? Sinon, il y a la version 4.30 complète. C'est quand même utile quand on a besoin des fonctions de l'API...
Ollivier
Quelles erreurs tu vois apparaître? Sinon, il y a la version 4.30 complète. C'est quand même utile quand on a besoin des fonctions de l'API...
Ollivier
Code : Tout sélectionner
Procedure.I RotateImage2(Image.I)
Protected Result.I
Protected SourceLarg.I
Protected SourceHaut.I
Protected DestLarg.I
Protected DestHaut.I
SourceLarg = ImageWidth(Image)
SourceHaut = ImageHeight(Image)
DestLarg = SourceHaut
DestHaut = SourceLarg
Result = CreateImage(-1, DestLarg, DestHaut)
For Y = 0 To (SourceHaut - 1)
For X = 0 To (SourceLarg - 1)
StartDrawing(ImageOutput(Image) )
C = Point(X, Y)
StopDrawing()
StartDrawing(ImageOutput(Result) )
Plot(DestLarg - Y - 1, X, C)
StopDrawing()
Next X
Next Y
ProcedureReturn Result
EndProcedure
;**************
; Test
;**************
For I = 0 To 1
Img = CreateImage(#PB_Any, 256, 16)
StartDrawing(ImageOutput(Img) )
Box(0, 0, 256, 16, #Blue)
DrawText(0, 0, "Cliquez sur ce message...", #White, #Blue)
StopDrawing()
If I = 1
Img = RotateImage2(Img) ; *************
EndIf
WW = ImageWidth(Img)
HH = ImageHeight(Img)
OpenWindow(0, 0, 0, WW, HH, "", $80000001)
creategadgetlist(WindowID(0) )
ImageGadget(0, 0, 0, WW, HH, ImageID(Img) )
Repeat
Until WaitWindowEvent() = #PB_Event_Gadget
CloseWindow(0)
FreeImage(Img)
Next I
End
Re: Impression en paysage
Salut, j'ai essayer d'adapter la procédure mais sans succès, j'obtiens une image toute noire bouffeuse d'encre à la place de mon image format paysage.
Je vais commenter le code pour vous expliquer le pourquoi du comment de ce qui se passe.
Donc 2 choses que je comprends pas (même si je me dis que #imagepaysage doit y etre pour quelque chose)
- Déjà la lenteur du traitement pour la rotation de l'image, ça prends plusieurs secondes pour que l'image tourne de 90 degrés, est-ce normal ??
- Pourquoi l'image paysage est noire.
ça vous semblera peut être bête mais je bloque depuis un bon moment et ça commence à me prendre la courge.
Une commande PB en natif pour indiquer le format de sortie paysage ou portrait fait cruellement défaut
! Alors la 3D et tout c'est super cool, mais la base reste la base ! Je ne voudrais pas que les utilisateurs aient à aller paramétrer l'impression avec PrintRequester()
Sur ce je vais faire à bouffer ça me changera les idées, et puis j'ai la dalle.
Merci de votre aide
Je vais commenter le code pour vous expliquer le pourquoi du comment de ce qui se passe.
Code : Tout sélectionner
#ImagePaysage=11
#Image=10
;(...) code
Case #Imprim
img=VBin_(NomArchive$,Str(k)+".jpg",Key$) ; je vais chercher une image dans mon conteneur VBIN
If img
CatchImage(#Image,img)
LargImage = ImageWidth(#Image) : HautImage = ImageHeight(#Image) ; il chope les tailles H et L
If LargImage>HautImage ; si largeur est plus grande que hauteur
FormatImage$="paysage" ; on dit que c'est du paysage
;-ici j'ai repris la procédure
DestLarg = HautImage
DestHaut = LargImage
Result = CreateImage(#ImagePaysage, DestLarg, DestHaut)
For y = 0 To (HautImage - 1)
For x = 0 To (LargImage - 1)
StartDrawing(ImageOutput(#ImagePaysage) )
C = Point(x, y)
StopDrawing()
StartDrawing(ImageOutput(#ImagePaysage) )
Plot(DestLarg - y - 1, x, C)
StopDrawing()
Next x
Next y
ResizeImage(#ImagePaysage,2244,3189,#PB_Image_Smooth) ; ici je redimensionne l'image pour qu'elle prenne preque la taille entière d'une feuille
; A4, en effet les images sont en 75 DPI donc je les grossi +- 4 fois
Else
FormatImage$="portrait"
ResizeImage(#Image,2244,3189,#PB_Image_Smooth)
;si format est en portrait on change rien si ce n'est le redimensionnement
EndIf
DetectImprim=DefaultPrinter()
If DetectImprim=0
MessageRequester ("Erreur","Aucune imprimante n'est détectée !",#MB_ICONEXCLAMATION)
Else
If StartPrinting("LDVM Printer")
If StartDrawing(PrinterOutput())
If FormatImage$="portrait"
DrawImage(ImageID(#Image), 50, 50) ; petite marge de 50 et on imprime #image
ElseIf FormatImage$="paysage"
DrawImage(ImageID(#ImagePaysage), 50, 50) ; petite marge de 50 et on imprime #imagepaysage
EndIf
StopDrawing()
Else
MessageRequester ("Erreur","Impossible d'imprimer !",#MB_ICONEXCLAMATION)
EndIf
StopPrinting()
EndIf
EndIf
Else
MessageRequester("erreur","Image Introuvable")
EndIf
- Déjà la lenteur du traitement pour la rotation de l'image, ça prends plusieurs secondes pour que l'image tourne de 90 degrés, est-ce normal ??
- Pourquoi l'image paysage est noire.
ça vous semblera peut être bête mais je bloque depuis un bon moment et ça commence à me prendre la courge.
Une commande PB en natif pour indiquer le format de sortie paysage ou portrait fait cruellement défaut

Sur ce je vais faire à bouffer ça me changera les idées, et puis j'ai la dalle.
Merci de votre aide
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Re: Impression en paysage
ben lorsque je vois ça :Ar-S a écrit : - Déjà la lenteur du traitement pour la rotation de l'image, ça prends plusieurs secondes pour que l'image tourne de 90 degrés, est-ce normal ??
Code : Tout sélectionner
For x = 0 To (LargImage - 1)
StartDrawing(ImageOutput(#ImagePaysage) )
C = Point(x, y)
StopDrawing()
StartDrawing(ImageOutput(#ImagePaysage) )
Plot(DestLarg - y - 1, x, C)
StopDrawing()
Next x
mais alors utiliser 2 fois StartDrawing()- StopDrawing() c'est du vice

a la place des lignes ci dessus , tu pourrai faire :
Code : Tout sélectionner
StartDrawing(ImageOutput(#ImagePaysage) )
For x = 0 To (LargImage - 1)
C = Point(x, y)
Plot(DestLarg - y - 1, x, C)
Next x
StopDrawing()

tu vas gagner en vitesse

Re: Impression en paysage
ENFIN !
J'ai trouvé une lib permettant de gérer plus d'options que celles en natives de PB.
C'est Printer_Lib (quelle surprise
)
Les sources sont incluses.
http://www.purebasicpower.de/?PrinterLib
Donc maintenant "portrait et paysage" ne sont plus du tout un soucis, le seul problème qui persiste est que je n'arrive pas à adapter à la volée la taille de l'image
pour qu'elle prenne 100% de la page (marges exceptées).. (alors que j'y arrivait en portrait avec les commandes de PB.. décidément).
J'ai trouvé une lib permettant de gérer plus d'options que celles en natives de PB.
C'est Printer_Lib (quelle surprise

Les sources sont incluses.
http://www.purebasicpower.de/?PrinterLib
Donc maintenant "portrait et paysage" ne sont plus du tout un soucis, le seul problème qui persiste est que je n'arrive pas à adapter à la volée la taille de l'image
pour qu'elle prenne 100% de la page (marges exceptées).. (alors que j'y arrivait en portrait avec les commandes de PB.. décidément).

~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels