Limitation de CreateImage ?

Archive.
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Limitation de CreateImage ?

Message par Ulix »

Avez-vous les mêmes valeurs que moi :?:
L' instruction CreateImage (0,largeur, hauteur) semble limitée a 5115 pixels en largeur et 8419 pixels en hauteur ! Avec des valeurs supérieurs l'image n'est pas créer ! Est-ce dû a l'instrustion ? A la taille mémoire ?
Une page A4 en 720 dpi représente 5952 pixels en largeur et 8418 pixels en hauteur en mode portrait, et cela me pose problême, n'y a t-il possiblité de contourné cette limitation ? :wink:
Merci d'avance !
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

la doc dit
Note: La taille des images est actuellement limitée à 8192x8192 pixels (si la mémoire disponible le permet).
Apparemment avec un sprite la limite est bien au delà , pourquoi tu ne passes pas par un sprite ?
Dernière modification par comtois le lun. 07/mars/2005 22:39, modifié 1 fois.
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

La Doc. dit :
CreateImage() :

Crée une nouvelle image vide qui peut être utilisée par les fonctions 2DDrawing comme surface de dessin. Si #PB_Any est utilisé pour le paramètre '#Image', l'identifiant de la nouvelle image sera renvoyé dans 'Resultat'. Le format de l'image est celui de l'écran courant: DrawImage() peut servir à afficher cette image dans une fenêtre par exemple.

Note: La taille des images est actuellement limitée à 8192x8192 pixels (si la mémoire disponible le permet).
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Une page A4 en 720 dpi
Bigre, pourquoi une telle résolution ?
C'est pour des billets de banque ? :D
Est beau ce qui plaît sans concept :)
Speedy Galerie
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message par Ulix »

Tout d'abord, merci pour toutes vos réponses. :D
Désolé, j'aurais du trouver par moi-même les valeurs maximales de l'instruction CreateImage. :Embarassed:

Voilà les infos que j'ai sur l'aide en ligne concernant l'instruction CreateImage
CreateImage()

Syntaxe

CreateImage(#Image, Width, Height)
Description

Crée une nouvelle image vide qui peut être utilisée par les fonctions 2DDrawing comme surface de dessin. Si #PB_Any est utilisé pour le paramètre '#Image', l'identifiant de la nouvelle image sera renvoyé dans 'Resultat'. Le format de l'image est celui de l'écran courant: DrawImage() peut servir à afficher cette image dans une fenêtre par exemple.
OS Supportés
Les valeurs ne sont pas indiquées !
Y a-t-il d'autres documentation, autre que l'aide en ligne consernant le PureBasic que je n'est pas ?

C'est Comtois qui a proposé d'utilisé un Sprite. Là aussi je n'ai pas les valeurs maximales dans l'aide en ligne !
Comment l'utilisé pour imprimer l'image de mon texte ? Je ne vois pas ! Désolé, je dois être trop bête ! (C'est de l'humour).


Mais si je vous explique ce que je veux faire peut-être comprendrez-vous mieux.
Je désire imprimé du texte avec une sélection des pages, ex: 1,5,6,8.
Je découpe mon texte (longueur des lignes, nombre de ligne) que je position avec un Locate et dessine avec DrawText sur une image créer avec CreateImage, puis enregistre avec SaveImage(...jpg).
Une fois toutes les pages créer et enregistrer, je n'est plus qu'a imprimé les pages sélectionnées en nombre de fois voulu.

StartDrawing(PrinterOutput())
LoadImage(#Image, ...jpg)
DrawImage(ImageID(), 0, 0)
NewPrinterPage()

Toute cette mécanique marche très bien (un peu lente, mais très souple, choix des pages, nombre de copie, paire/impaire...)
Mon problème arrive avec une résolution d'imprimante a 720 dpi puisque je crée une image dans la même résolution que l'imprimante et les dimensions de l'image me sont fournie par :
LargeurPagePixel = GetDeviceCaps_(printer_DC,#PHYSICALWIDTH)
HauteurPagePixel = GetDeviceCaps_(printer_DC,#PHYSICALHEIGHT)
pour une page A4.
C'est ici que ça bloque => CreateImage(#Image, LargeurPagePixel, HauteurPagePixel):mad:

J'ai pensé créer l'image dans une résolution inférieur et faire un ResizeImage, mais le résultat imprimé n'est pas très nette a mon goût.

Alors comment contourné le problème (une commande API) ? Ou alors Fred a peut-être envisagé d'augmenté les valeurs ?
Je suis ouvert a toutes propositions. Merci d'avance ! :wink:
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

Ca me parait compliqué ton truc. Faire des images en 720 dpi pour imprimer du texte 8O .

Concernant la taille maximale avec CreateImage(), c'est dans la doc standard de PB. Mais je ne sais dans quelle version la note est apparu. Mets à jour PB et tu auras la meme doc... :wink:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Franchement, une image à la résolution de 720 dpi, c'est de la folie pure! Peut-être que ton imprimante est capable de le gérer, mais c'est vraiment superflu! La plupart des magazines que tu lis dans la commerce ont des images imprimées à une résolution de 300dpi, et ça suffit largement. Dans tous les cas ton imprimante peut interpoler dans sa résolution max (gouttelettes?).

Si tu tiens vraiment à exploiter toutes ses capacités, tu peux utiliser l'api, et notamment créer un dc. Tu as des exemples dans codearchiv
http://www.purearea.net/pb/CodeArchiv/CodeArchiv.html
LeCyb
Messages : 273
Inscription : dim. 26/déc./2004 20:49

Message par LeCyb »

Je voudrais juste signaler que 720dpi c'est loin être de la folie pour imprimer du texte.
Je bosse dans une imprimerie et on a des machines qui font 1200dpi en A3+ (9500ppm :-D).
Et quand vous voyez à longueur de journées des pages de texte dans des polices inimaginables vous remarquez au premier coup d'oeuil si c'est du 400dpi, 600dpi ou 1200dpi (et on arrive même à faire la différence sur une centaine de polices et leurs dérivées).

Par contre Torp, ce que je ne capte pas trop c'est pourquoi est que tu fais une image avec ton texte ?
A l'heure actuelle la pluspart des imprimantes sont postscript et vu que le PS n'est que du texte ça serait nettement plus léger que gérer des images de plusieurs milliers de pixels.

Pour balancer du postscript sur l'imprimante il existe une commande sous DOS:
C:\> lpr -P imprimante -o l fichier.ps

Et ici l'explication de microsoft pour balancer du posscript depuis ton programme:
http://msdn.microsoft.com/library/en-us ... l_95id.asp

J'avoue qu'il te faudra apprendre quelques rudiments dans le language PS mais je suis certain que ça sera nettement plus extensible et rapide que les jpeg.
Vive le thread-safe !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

LeCyb> C'est clair, je ne parlais pas des flasheuses, je n'ai pas expliqué les dpi ni la linéature etc. Toutes ces machines récupèrent le texte en vectoriel, et rasterisent à la dernière minute dans leur résolution (en général 1200dpi ou 2400dpi), sauf bien sûr si on leur a balancé le texte en format image.

Par contre pour utiliser le postcript, il faut que l'imprimante reconnaisse ce langage ou que tu aies un pilote postscript et acrobat ou ghostscript pour faire la conversion. Sur PC, beaucoup d'imprimantes utilisent le PCL.

Dans ce cas, le plus simple est d'utiliser comme je le préconisais l'api et le dc http://msdn.microsoft.com/library/defau ... erface.asp
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

LeCyb a écrit : Par contre Torp, ce que je ne capte pas trop c'est pourquoi est que tu fais une image avec ton texte ?
Il faudrait plutot demander ca à Ulix...
Répondre