OVH Cloud OVH Cloud

API gdi32

3 réponses
Avatar
Nico
Bonjour,

j'utilise l'API gdi32 pour faire une prei=view dans mon appli VB6.
Je dessine dans un pPictureBox.
Lorsque je veux sauvegarder l'image dans un fichier l'image est vide !

Merci pour votre aide

Nico

3 réponses

Avatar
Christophe
Salut Nico

Faudrait donner un peu plus de précision

utilises-tu un DIB ?
un DC en memoire ?

Bref donne nous le code de l'affichage et comment tu essaye de recuperer
l'image pour l'enregistrer, tu auras certainement de l'aide.

Christophe V.

"Nico" a écrit dans le message de news:

Bonjour,

j'utilise l'API gdi32 pour faire une prei=view dans mon appli VB6.
Je dessine dans un pPictureBox.
Lorsque je veux sauvegarder l'image dans un fichier l'image est vide !

Merci pour votre aide

Nico




Avatar
Christophe
Salut si tu utilise un DC en memoire il faut gerer toi même le paint donc
autoredraw a false.

Pour sauver une image

Private biTmp As BITMAPINFO
Private bittabfichier() as byte

public sub sauvebitmap

'bi est le bitmapinfo qui t'as servi a creer le DIB dans le DC

biTmp = bi

'recupere les données DIB

'calcul la taille des données alignées sur 32bits

widthdep& = byteperscanline(bi.bmiHeader.biWidth, bi.bmiHeader.biBitCount)
heightdep& = bi.bmiHeader.biHeight

ReDim bittabfichier(widthdep& * heightdep&)

'deselctionne le bitamp du DC avant appel à getdibits

save& = SelectObject(mshadowDC&, OldObject&)
dummy& = GetDIBits&(mshadowDC&, handleDIBshadow&, 0, heightdep&,
bittabfichier(0), biTmp, DIB_RGB_COLORS)
save& = SelectObject(mshadowDC&, save&)

WriteTempBitmap

end sub

'la fonction suivante est pour les N&B pour les couleurs tu adaptes en
'fonction de Bibitcount colorarray étant un tableau de rgbquad

Private Sub WriteTempBitmap()
Dim bifh As BITMAPFILEHEADER

nomfichencours = App.Path & "temp.bmp"

Open nomfichencours For Binary As #1

bifh.bfType = &H4D42
bifh.bfSize = Len(bifh) + Len(biTmp.bmiHeader) + 8 + UBound(bittabfichier) +
1
bifh.bfOffBits = Len(bifh) + Len(biTmp.bmiHeader) + Len(colorarray(0)) * 2

Put #1, , bifh
Put #1, , biTmp.bmiHeader
Put #1, , colorarray(0)
Put #1, , colorarray(1)
Put #1, , bittabfichier

Close #1
End Sub

Public Function scanalign(pwidth&) As Long
scanalign = (pwidth& + 3) And &HFFFFFFFC
End Function
Public Function byteperscanline(ByVal pwidth&, ByVal bitcount&) As Long
Select Case bitcount&

Case 1
byteperscanline = scanalign((pwidth& + 7) 8)
Case 4
byteperscanline = scanalign((pwidth& + 1) 2)
Case 8
byteperscanline = scanalign(pwidth&)
Case 24
byteperscanline = scanalign(pwidth& * 3)
Case 32
'byteperscanline
End Select

End Function

Christophe V.


"Nico" a écrit dans le message de news:

Salut Christophe,

j'utilisae un DC en mémoire.
J'essayais betement de faire un savepicture ImageBox.Image, "c:toto.bmp"
Si je mets AutoRedraw à true il n'y a plus rien qui marche.

merci

Nico

"Christophe" a écrit dans le message de news:
bfje4k$k4q$
> Salut Nico
>
> Faudrait donner un peu plus de précision
>
> utilises-tu un DIB ?
> un DC en memoire ?
>
> Bref donne nous le code de l'affichage et comment tu essaye de recuperer
> l'image pour l'enregistrer, tu auras certainement de l'aide.
>
> Christophe V.
>
> "Nico" a écrit dans le message de news:
>
> > Bonjour,
> >
> > j'utilise l'API gdi32 pour faire une prei=view dans mon appli VB6.
> > Je dessine dans un pPictureBox.
> > Lorsque je veux sauvegarder l'image dans un fichier l'image est vide !
> >
> > Merci pour votre aide
> >
> > Nico
> >
> >
>
>




Avatar
Nico
Salut Christophe, mille fois merci, pour ma premiere experience avec les DC
je galere un peu.
J'etudie ton code et te donnerai de mes nouvelles.

merci

nico

"Christophe" a écrit dans le message de news:
bfjh45$mh8$
Salut si tu utilise un DC en memoire il faut gerer toi même le paint donc
autoredraw a false.

Pour sauver une image

Private biTmp As BITMAPINFO
Private bittabfichier() as byte

public sub sauvebitmap

'bi est le bitmapinfo qui t'as servi a creer le DIB dans le DC

biTmp = bi

'recupere les données DIB

'calcul la taille des données alignées sur 32bits

widthdep& = byteperscanline(bi.bmiHeader.biWidth, bi.bmiHeader.biBitCount)
heightdep& = bi.bmiHeader.biHeight

ReDim bittabfichier(widthdep& * heightdep&)

'deselctionne le bitamp du DC avant appel à getdibits

save& = SelectObject(mshadowDC&, OldObject&)
dummy& = GetDIBits&(mshadowDC&, handleDIBshadow&, 0, heightdep&,
bittabfichier(0), biTmp, DIB_RGB_COLORS)
save& = SelectObject(mshadowDC&, save&)

WriteTempBitmap

end sub

'la fonction suivante est pour les N&B pour les couleurs tu adaptes en
'fonction de Bibitcount colorarray étant un tableau de rgbquad

Private Sub WriteTempBitmap()
Dim bifh As BITMAPFILEHEADER

nomfichencours = App.Path & "temp.bmp"

Open nomfichencours For Binary As #1

bifh.bfType = &H4D42
bifh.bfSize = Len(bifh) + Len(biTmp.bmiHeader) + 8 + UBound(bittabfichier)


+
1
bifh.bfOffBits = Len(bifh) + Len(biTmp.bmiHeader) + Len(colorarray(0)) * 2

Put #1, , bifh
Put #1, , biTmp.bmiHeader
Put #1, , colorarray(0)
Put #1, , colorarray(1)
Put #1, , bittabfichier

Close #1
End Sub

Public Function scanalign(pwidth&) As Long
scanalign = (pwidth& + 3) And &HFFFFFFFC
End Function
Public Function byteperscanline(ByVal pwidth&, ByVal bitcount&) As Long
Select Case bitcount&

Case 1
byteperscanline = scanalign((pwidth& + 7) 8)
Case 4
byteperscanline = scanalign((pwidth& + 1) 2)
Case 8
byteperscanline = scanalign(pwidth&)
Case 24
byteperscanline = scanalign(pwidth& * 3)
Case 32
'byteperscanline
End Select

End Function

Christophe V.


"Nico" a écrit dans le message de news:

> Salut Christophe,
>
> j'utilisae un DC en mémoire.
> J'essayais betement de faire un savepicture ImageBox.Image,


"c:toto.bmp"
> Si je mets AutoRedraw à true il n'y a plus rien qui marche.
>
> merci
>
> Nico
>
> "Christophe" a écrit dans le message de news:
> bfje4k$k4q$
> > Salut Nico
> >
> > Faudrait donner un peu plus de précision
> >
> > utilises-tu un DIB ?
> > un DC en memoire ?
> >
> > Bref donne nous le code de l'affichage et comment tu essaye de


recuperer
> > l'image pour l'enregistrer, tu auras certainement de l'aide.
> >
> > Christophe V.
> >
> > "Nico" a écrit dans le message de news:
> >
> > > Bonjour,
> > >
> > > j'utilise l'API gdi32 pour faire une prei=view dans mon appli VB6.
> > > Je dessine dans un pPictureBox.
> > > Lorsque je veux sauvegarder l'image dans un fichier l'image est vide


!
> > >
> > > Merci pour votre aide
> > >
> > > Nico
> > >
> > >
> >
> >
>
>