Problem ! Convertir une image bitmap en flux binaire!!

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

Slt toute le monde c est encore moi :(

je suis entrain de programmer une application purement coder en Pb, cette apli consiste a envoyez un flux des images "capture d Ecran" par TCP pour cella il faux que je convertie l image en binaire après l envoyer.. voila mon code quel qu un d expérience peu me corriger et merci d avance :D

Code : Tout sélectionner

Structure GdiplusStartupInput 
  GdiPlusVersion.l 
  *DebugEventCallback.DEBUG_EVENT
  SuppressBackgroundThread.l 
  SuppressExternalCodecs.l 
EndStructure 
Structure EncoderParameter
  Guid.GUID
  NumberOfValues.l
  Type.l
  Value.l
EndStructure
Structure EncoderParameters
  Count.l
  Parameter.EncoderParameter[1]
EndStructure

Defined *token

GdiplusStartupInput.GdiplusStartupInput\GdiPlusVersion=1

Prototype GdiplusStartup(a,b,c)
Prototype GdipSaveImageToStream(a,b,c,d)
Prototype GdipDisposeImage(a)
Prototype GdiplusShutdown(a)
Prototype GdipCreateBitmapFromHBITMAP(a,b,c)
lib_gdiplus = OpenLibrary(#PB_Any, "GDIPlus.dll") 
Debug lib_gdiplus
GdiplusStartup_.GdiplusStartup=GetFunction(lib_gdiplus,"GdiplusStartup")
GdipSaveImageToStream_.GdipSaveImageToStream=GetFunction(lib_gdiplus,"GdipSaveImageToStream")
GdipDisposeImage_.GdipDisposeImage=GetFunction(lib_gdiplus,"GdipDisposeImage")
GdiplusShutdown_.GdiplusShutdown=GetFunction(lib_gdiplus,"GdiplusShutdown")
GdipCreateBitmapFromHBITMAP_.GdipCreateBitmapFromHBITMAP=GetFunction(lib_gdiplus,"GdipCreateBitmapFromHBITMAP")

Debug GdiplusStartup_(*token, @GdiplusStartupInput,#NUL)

Define *IStream
Debug CreateStreamOnHGlobal_(#NUL,#True,@*IStream)
Debug *IStream

With encoderparams.EncoderParameters
  \Count = 1
  \Parameter[0]\Type = 4
  \Parameter[0]\NumberOfValues = 1
  \parameter[0]\Value = 100
EndWith
CopyMemory(?clsid_EncoderQuality, encoderparams\parameter[0]\Guid, SizeOf(GUID))

Define *image

CreateImage(0, 640,640)
StartDrawing(ImageOutput(0))
Box(0,0,640,640,#White)
Circle(319,319,319,#Blue)
Circle(319,319,219,#Green)
Circle(319,319,119,#Yellow)
StopDrawing()
Debug  ImageID(0)
Debug GdipCreateBitmapFromHBITMAP_(ImageID(0), 0, @*image)
Debug *image
Debug GdipSaveImageToStream_(*image,*IStream,?clsid_jpeg, @encoderparams)
MessageRequester("","")

GdipDisposeImage_(*image)
Define *hMemory
GetHGlobalFromStream_(*IStream,@*hMemory)

sizeimage= GlobalSize_(*hMemory)

Debug sizeimage

*Binimage=AllocateMemory(sizeimage)
*Binimage=GlobalLock_(*hMemory)
tVARIANT.VARIANT
DispCallFunc_(*IStream,16,4,23,0,0,0,@tVARIANT)
GlobalFree_(*hMemory)

GdiplusShutdown_(*token)
CloseLibrary(lib_gdiplus)

DataSection
  clsid_jpeg: ; clsid for jpeg image format
  Data.l $557CF401
  Data.w $1A04
  Data.w $11D3
  Data.b $9A,$73,$00,$00,$F8,$1E,$F3,$2E
  
  clsid_EncoderQuality:
  Data.l $1D5BE4B5
  Data.w $FA4A
  Data.w $452D
  Data.b $9C,$DD,$5D,$B3,$51,$05,$E7,$EB
EndDataSection
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par falsam »

GDI Denis est effectivement mieux placé pour répondre.

Voyons voir si j'ai compris.
- Tu fais des captures d'écrans.
- Tu les envoies avec le protocole TCP.

Tu les envoies vers un serveur qui contient une application permettant de visualiser tes images ?
Dernière modification par falsam le lun. 14/sept./2015 21:04, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par falsam »

J'avais remarqué. Rien que des truc avec des API.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par G-Rom »

Pourquoi passer par GDI ? PureBasic fourni toutes les commandes pour envoyer des images bitmap sur le réseau.
Le problème , c'est que tu auras une capture sous forme de tableau 2D qui représente ton image , il faut la compresser à la volée , Purebasic peu aussi te fournir une solution , regarde la doc sur Packer , une fois compresser il faudra que tu utilises le bon protocole réseaux , si c'est une image ponctuelle , le protocole TCP/IP fera l'affaire , même sans la compréssion , si c'est du streaming que tu vises , il faudra que tu changes de protocole en UDP , faire des plus petits paquets & faire de la mise en cache, c'est déjà beaucoup plus complexe.
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

merci pour votre réponse :) ,, voilla apres 2 heur de r étude les fonction gdip j ai trouver la solution 8) ,,pour qui est intéressé voilla le code:

Code : Tout sélectionner

Prototype GdiplusStartup(*a,b,c)
Prototype GdipSaveImageToStream(*a,*b,c,d)
Prototype GdipDisposeImage(*a)
Prototype GdiplusShutdown(*a)
Prototype GdipCreateBitmapFromHBITMAP(a, b, *c)
Prototype GdipGetImageWidth(a,*b)
Prototype GdipGetImageHeight(a,*b)
Prototype GdipCloneBitmapArea(a.f,b.f,c.f,d.f,e,*f,*g)
Prototype GdipSaveImageToFile(a,b.s,*c,*d)

lib_gdiplus = OpenLibrary(#PB_Any, "GDIPlus.dll") 
GdiplusStartup_.GdiplusStartup=GetFunction(lib_gdiplus,"GdiplusStartup")
GdipSaveImageToStream_.GdipSaveImageToStream=GetFunction(lib_gdiplus,"GdipSaveImageToStream")
GdipDisposeImage_.GdipDisposeImage=GetFunction(lib_gdiplus,"GdipDisposeImage")
GdiplusShutdown_.GdiplusShutdown=GetFunction(lib_gdiplus,"GdiplusShutdown")
GdipCreateBitmapFromHBITMAP_.GdipCreateBitmapFromHBITMAP=GetFunction(lib_gdiplus,"GdipCreateBitmapFromHBITMAP")
GdipGetImageWidth_.GdipGetImageWidth=GetFunction(lib_gdiplus,"GdipGetImageWidth")
GdipGetImageHeight_.GdipGetImageHeight=GetFunction(lib_gdiplus,"GdipGetImageHeight")
GdipCloneBitmapArea_.GdipCloneBitmapArea=GetFunction(lib_gdiplus,"GdipCloneBitmapArea")
GdipSaveImageToFile_.GdipSaveImageToFile=GetFunction(lib_gdiplus,"GdipSaveImageToFile")

Structure GdiplusStartupInput 
  GdiPlusVersion.l 
  *DebugEventCallback.DEBUG_EVENT
  SuppressBackgroundThread.l 
  SuppressExternalCodecs.l 
EndStructure 
Structure EncoderParameter
  Guid.GUID
  NumberOfValues.l
  Type.l
  Value.l
EndStructure
Structure EncoderParameters
  Count.l
  Parameter.EncoderParameter[28]
EndStructure

CreateImage(0, 640,640)
StartDrawing(ImageOutput(0))
Box(0,0,640,640,#White)
Circle(319,319,319,#Blue)
Circle(319,319,219,#Green)
Circle(319,319,119,#Yellow)
StopDrawing()

GdiplusStartupInput.GdiplusStartupInput\GdiPlusVersion=1

Define *token
GdiplusStartup_(@*token, @GdiplusStartupInput,#NUL)

Define image
GdipCreateBitmapFromHBITMAP_(ImageID(0), 0, @*image)
FreeImage(0)

Define xw,xy
GdipGetImageWidth_(*image,@xw)
GdipGetImageHeight_(*image,@xy)

Debug Str(xw) +" X "+ Str(xy)

With encoderparams.EncoderParameters
  \Count = 1
  \Parameter[0]\Type = 4
  \Parameter[0]\NumberOfValues = 1
  \parameter[0]\Value = @"100"
EndWith
CopyMemory(?clsid_EncoderQuality, encoderparams\parameter[0]\Guid, SizeOf(GUID))

;GdipSaveImageToFile_(*image,"C:\Users\larbi\Desktop\hhh.jpg",?clsid_jpeg, @encoderparams)

Define *IStream
CreateStreamOnHGlobal_(#NUL,#True,@*IStream)

GdipSaveImageToStream_(*image,*IStream,?clsid_jpeg, @encoderparams)

GdipDisposeImage_(*image)

Define *hMemory
GetHGlobalFromStream_(*IStream,@*hMemory)

sizeimage= GlobalSize_(*hMemory)

Debug sizeimage

*Binimage=AllocateMemory(sizeimage)
*Binimage=GlobalLock_(*hMemory)

tVARIANT.VARIANT
DispCallFunc_(*IStream,16,4,23,0,0,0,@tVARIANT)
GlobalFree_(*hMemory)
GdiplusShutdown_(*token)
CloseLibrary(lib_gdiplus)

imgpath=OpenFile(#PB_Any,"C:\Users\larbi\Desktop\hhh.jpg")
WriteData(imgpath,*Binimage,sizeimage)
CloseFile(imgpath)

FreeMemory(*Binimage)

DataSection
  clsid_jpeg: ; clsid for jpeg image format
  Data.l $557CF401
  Data.w $1A04
  Data.w $11D3
  Data.b $9A,$73,$00,$00,$F8,$1E,$F3,$2E
  
  clsid_EncoderQuality:
  Data.l $1D5BE4B5
  Data.w $FA4A
  Data.w $452D
  Data.b $9C,$DD,$5D,$B3,$51,$05,$E7,$EB
EndDataSection
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

falsam a écrit :GDI Denis est effectivement mieux placé pour répondre.

Voyons voir si j'ai compris.
- Tu fais des captures d'écrans.
- Tu les envoies avec le protocole TCP.

Tu les envoies vers un serveur qui contient une application permettant de visualiser tes images ?

ouii exactement ca :) une application genre teamviewer
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

Spock a écrit :celtic88 est partisant du tres compliqué :lol: :)
looll je suis tree nop :(
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par falsam »

celtic88 a écrit :ouii exactement ca une application genre teamviewer
C'est bien ce que je pensais :wink:
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

falsam a écrit :J'avais remarqué. Rien que des truc avec des API.
en fait tout les application utilise les api même pb avec cest command :)
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

falsam a écrit :
celtic88 a écrit :ouii exactement ca une application genre teamviewer
C'est bien ce que je pensais :wink:
aloor t es propo son quoi :P
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par falsam »

celtic88 a écrit :en fait tout les application utilise les api même pb avec cest command
Alors pourquoi tu n'utilises pas un peu plus les fonctions de PureBasic ?
celtic88 a écrit :aloor t es propo son quoi
Pour le moment je n'ai rien à te proposer. Je voulais être certain de ta demande.

Ma technique serait d'envoyer les images directement à un script PHP. Par contre il va falloir sacrément compresser les images pour rester fluide.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

Spock a écrit :je crois qu'il translate des codes venant du C .. ceci explique peut etre cela :)

@Celtic

faire du pure basic c'est comme apprendre une langue ....
il ne faut pas chercher a traduire mot a mot , il faut se lancer a fond dans la langue
(et c'est quelqu'un qui ne parle aucune langue étrangère qui te le dis :lol: )

meme si tu as des codes en C , souvent c'est mieux de refaire a partir de zero en Purebasic ...
je sui un peu le genre fainéant lolll et cest sa existe des sources bien definer dans d autr langage pour koi pas les traduire en pb, et en gagne de temps!
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

@falsam je voix que tu est ancien dans ce forum et dans la programmation en général ,c est t utilise les fonction qui son dans pb tu va vit tomber dans c est limite exemple regarde la différence entre messageboxEx_ et MessageRequester! je veut dir la base de tt programmation et "langage c est les fonctions api :)
.....i Love Pb :)
Avatar de l’utilisateur
celtic88
Messages : 309
Inscription : sam. 12/sept./2015 14:31
Localisation : Alger

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par celtic88 »

son oublier de dir merci a le Grand FRED
.....i Love Pb :)
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Problem ! Convertir une image bitmap en flux binaire!!

Message par falsam »

celtic88 a écrit :je sui un peu le genre fainéant lolll et cest sa existe des sources bien definer dans d autr langage pour koi pas les traduire en pb, et en gagne de temps!
Si tu veux fainéant, au lieu de coder

Code : Tout sélectionner

GdipSaveImageToFile_(*image,"exemple.jpg",?clsid_jpg, @encoderparams)
tu pourrais écrire

Code : Tout sélectionner

UseJPEGImageEncoder()
SaveImage(Image, "exemple.jpg", #PB_ImagePlugin_JPEG)
Tu gagneras du temps, et c'est plus simple.
celtic88 a écrit :c est t utilise les fonction qui son dans pb tu va vit tomber dans c est limite exemple regarde la différence entre messageboxEx_ et MessageRequester! je veut dir la base de tt programmation et "langage c est les fonctions api
Si j'ai choisi PureBasic, c'est pour sa simplicité d'utilisation et le temps gagner à coder. J'ai pu me passer des API durant des années et ça me va bien.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Répondre