PB à toute heure et à tout moment. (à parcourir avec modération)

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 28-09-2011 20:24:30

mattdamon  
Le Tuniso-Parisien
Lieu: Livry-Gargan 93190
Date d'inscription: 29-12-2007
Messages: 569
Pépites: 89
Banque: 77,512,666,613,392,940

redimensionner une image dans RichtextEdit

Bonjour,

Comme le titre l'indique, j'ai besoin de redimensionner une image située dans un control RichtextEdit.

En fait, l'image est collée dans un RichtextEdit mais sa taille n'est pas conforme avec la taille d'une page format A4 à l'impression. Pour cela je suis obligé de réduire mon image avant de lancer l'impression.

J'ai essayé de modifier les paramètres height et witdh du controle RichtextEdit mais ce n'est pas la bonne solution puisque je veux afficher toute l'image.

Comment faire pour réduire la taille de l'image ? (ce n'est pas grave si la qualité dégrade un peu ;-)


Merci à tous et bonne journée

Dernière modification par mattdamon (01-10-2011 19:54:24)

Hors ligne

 

#2 29-09-2011 09:39:07

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: redimensionner une image dans RichtextEdit

mattdamon a écrit:

En fait, l'image est collé dans un RichtextEdit mais sa taille n'est pas conforme avec la taille d'une page format A4 à l'impression. Pour cela je suis obligé de réduire mon image avec de lancer l'impression.

Je ne suis pas sûr de bien comprendre : l'image fait déjà la taille d'une page A4 et tu souhaites la réduire pour que ça rentre dans les marges d'impression de l'imprimante ?


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#3 29-09-2011 11:29:30

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: redimensionner une image dans RichtextEdit

Les images dans les richtexts sont carrément intégrées dans le code RTF.
Le seul moyen de la redimensionner est d'en importer une version plus petite que tu auras au préalable modifiée dans un éditeur
type paint par exemple.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#4 29-09-2011 12:07:00

seki  
0x73656B69
Award: bf
Lieu: Laquenexy & Luxembourg
Date d'inscription: 20-11-2008
Messages: 1118
Pépites: 4,296,080,204
Banque: 9,223,372,036,854,776,000
Site web

Re: redimensionner une image dans RichtextEdit

Je n'ai jamais utilisé le RichEdit. Il y a un moyen d'accéder / de manipuler le code rtf dedans ?

Parce que je viens de faire un rapide test avec wordpad.
Soit une image collée dans wordpad, le fichier correspondant donne

Code:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20{\pict\wmetafile8\picwgoal10635\pichgoal6645 
010009000003385811000000225811000000050000000b0200000000050000000c02de1d732622
581100430f2000cc000000e402000400000000de1d7326000000002800000000040000e4020000
...
...
0e24170e24170e24170e24170e24170e24170e24170e24170e24170e24170e24170e24170e2417
0e24170e24170e24170e24170e24170e24170e24170e6767677979799090909494946464640300
00000000
}\par
}

Si je redimensionne l'image et que j'enregistre dans un .rtf je remarque que l'image est toujours enregistrée en entier (càd que si je rouvre le fichier, je peux l'agrandir et retrouver l'image de départ. En fait Wordpad fait varier le nombre qui accompagne les paramètres picwgoal et pichgoal visibles à la fin de la 2ème ligne.


Edit : oui, je viens de tester qu'on peut récupérer le code RTF avec CopyRTF(true) et le remplacer avec PasteRTF(), donc en théorie, on peut bricoler le contenu comme on veut à coup de regex ou de Pos(), Mid() et autres. Bon je ne dis pas que c'est facile, juste que ça doit être possible...

Dernière modification par seki (29-09-2011 12:21:32)


The best programs are the ones written when the programmer is supposed to be working on something else. - Melinda Varian

Mes réponses PB sur StackOverflow
http://stackoverflow.com/users/flair/317266.png

Hors ligne

 

#5 01-10-2011 20:23:21

mattdamon  
Le Tuniso-Parisien
Lieu: Livry-Gargan 93190
Date d'inscription: 29-12-2007
Messages: 569
Pépites: 89
Banque: 77,512,666,613,392,940

Re: redimensionner une image dans RichtextEdit

seki a écrit:

mattdamon a écrit:

En fait, l'image est collé dans un RichtextEdit mais sa taille n'est pas conforme avec la taille d'une page format A4 à l'impression. Pour cela je suis obligé de réduire mon image avec de lancer l'impression.

Je ne suis pas sûr de bien comprendre : l'image fait déjà la taille d'une page A4 et tu souhaites la réduire pour que ça rentre dans les marges d'impression de l'imprimante ?

Non, l'image est représente une capture d'écran de tout mon desktop (la même taille que mon desktop).

J'arrive à enregistrer cette image sous word et là le problème.. je vois que l'image dépasse la taille de document word et par la suite dépasse les marges d'impression de l'imprimante.

Sachant que au moment de sauvegarde de l'image, je n'ai pas la main de réduire sa taille.  pour cela, j'ai postulé ici pour savoir si c'est possible d'adapter la taille de l'image en la réduisant.

foon a écrit:

Les images dans les richtexts sont carrément intégrées dans le code RTF.
Le seul moyen de la redimensionner est d'en importer une version plus petite que tu auras au préalable modifiée dans un éditeur
type paint par exemple.

Désolé foon, je ne peux importer une version plus petite car j'ai pris l'image à partir d'une capture d'écran en utilisant une API windows (c'est une autre histoire :-) )


En fait, j'ai utilisé ce bout de code qui permet de prendre une capture d'écran de ce qui est affiché sur mon desktop. Mais ce code permet de prendre une capture avec les dimensions réelle de desktop !!!

Vraiment, j'ai essayé de modifier ce code pour prendre une capture d'écran avec des dimensions plus petites mais toujours j'arrive plus

Franchement, voici le code, si quelqu'un peut m'aider ...


http://eric.aling.tripod.com/PB/tips/pbtip35.htm
http://forums.textcontrol.com/archive/i … 09f78e322b
http://sourceforge.net/projects/powerpr … _test=beta

ou

Code: pb

uLong ll_DeskHwnd,ll_hdc,ll_hdcMem ,ll_hBitmap
uLong ll_fleft, ll_ftop, ll_fwidth , ll_fheight
uLong ll_return

// The GetDesktopWindow function returns the handle of the Windows desktop 
// window. The desktop window covers the entire screen. 
// The desktop window is the area on top of which all icons and
// other windows are painted. 

ll_DeskHwnd = GetDesktopWindow()

// Get in pixel value the x,y,width,height of the window 
// because of the powerbuilder Units (PBU)

ll_fwidth=UnitsToPixels(This.width, XUnitsToPixels!)
ll_fheight=UnitsToPixels(This.height, YUnitsToPixels!)
ll_fleft=UnitsToPixels(This.X, XUnitsToPixels!)
ll_ftop=UnitsToPixels(This.Y, YUnitsToPixels!)

// 
// Get the device context of Desktop and allocate memory
// 

ll_hdc = GetDC(ll_DeskHwnd)
ll_hdcMem = CreateCompatibleDC(ll_hdc)
ll_hBitmap = CreateCompatibleBitmap(ll_hdc, ll_fwidth, ll_fheight)

If ll_hBitmap <> 0 Then
    ll_return = SelectObject(ll_hdcMem, ll_hBitmap)

// 
// Copy the Desktop bitmap to memory location
// 

ll_return = BitBlt(ll_hdcMem, 0, 0, ll_fwidth, ll_fheight, ll_hdc, ll_fleft, ll_ftop, 13369376)

// 
// try to store the bitmap into a blob so we can save it
//    this does not always work BTW
// 

    long ll_pixels = 1
    
    str_bitmapinfo lstr_Info
    str_bitmapinfo lstr_InfoDummy
    str_bitmapheader lstr_Header
    
    lstr_Info.bmiheader.bisize=40
    lstr_InfoDummy.bmiheader.bisize=40
    
    // Get the bitmapinfo
    
    if GetDIBits(ll_hdcMem, ll_hBitmap, 0, ll_fheight, 0, lstr_Info, 0) > 0 then

        if lstr_Info.bmiheader.biBitCount = 16 or &
            lstr_Info.bmiheader.biBitCount = 32 then
            ll_pixels = lstr_info.bmiheader.biwidth *     lstr_info.bmiheader.biheight
        end if
        
        lstr_Info.bmiColor[ll_pixels] = 0
        
        abl_data = blob(space(lstr_Info.bmiheader.bisizeimage))

        // get the actual bits

        GetDIBits(ll_hdcMem, ll_hBitmap, 0, ll_fheight, abl_data, lstr_Info, 0) 

        // create a bitmap header

        lstr_Header.bfType[1] = 'B'
        lstr_Header.bfType[2] = 'M'
        lstr_Header.bfSize     = lstr_Info.bmiheader.bisizeimage
        lstr_Header.bfReserved1 = 0
        lstr_Header.bfReserved2 = 0
        lstr_Header.bfOffBits = 54 + (ll_pixels * 4)

        // copy the header structure to a blob

        blob lbl_header
        lbl_header = blob(space(14))
        CopyBitmapFileHeader(lbl_header, lstr_Header, 14 )

        // copy the info structure to a blob

        blob lbl_info
        lbl_Info = blob(space(40 + ll_pixels * 4) )
        CopyBitmapInfo(lbl_Info, lstr_Info, 40 + ll_pixels * 4 )
        
        // add all together and we have a window bitmap in a blob
        
        abl_Data = lbl_header + lbl_info + abl_Data
        
    end if

// '---------------------------------------------
// ' Set up the Clipboard and copy bitmap
// '---------------------------------------------

ll_return = OpenClipboard(ll_DeskHwnd)
ll_return = EmptyClipboard()
ll_return = SetClipboardData(2, ll_hBitmap)
ll_return = CloseClipboard()

End If

// '---------------------------------------------
// ' Clean up handles
// '---------------------------------------------
ll_return = DeleteDC(ll_hdcMem)
ll_return = ReleaseDC(ll_DeskHwnd, ll_hdc)

return 1


NB : Je dois modifier ce code de telle façon j'obtiens une capture d'écran de tout mon desktop avec les mêmes dimensions d'une page format A4

Une idée ?

Merci !

Dernière modification par mattdamon (05-10-2011 21:26:42)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22