website logo
Auteur
avatar
AmiDARK

Forum » » Création-Développement » » Comment capturer un écran en C ?


Posté : 08-03-2014 13:55 icone du post

zzd10h, voila en C comment je charge une image dans un buffer mémoire en utilisant les datatypes :


/*?*********************************************************
**????????????????????????????????????????????????????????**
**???AmiDARK?Engine?Development?Project???????????????????**
**??------------------------------------??????????????????**
**????????????????????????????????????????????????????????**
**?File???:?AOSLibDTT.o???????????????????????????????????**
**?Author?:?Frederic?Cordier??????????????????????????????**
**?Date???:?2013.04.18????????????????????????????????????**
************************************************************
*/

//?2013.04.18?:?Restructuration?complète?du?SDK
//
//?************************************************************************** *************************************
/*???????????????????????????????????????????????????????????????Ouverture?d' une?librairie?et?de?son?interface.?*/
int?deOpenDataTypes(?void?){
??int?Success?=?0;
??DataTypesBase?=?MyOpenLibrary(?"datatypes.library",?0?);
??if?(?DataTypesBase?!=?NULL?){
????#if?defined(?__amigaos4__?)
??????IDataTypes?=?(struct?DataTypesIFace?*)InterfacePtr;
??????if?(?IDataTypes?!=?NULL?){
????????Success?=?1;
???????}
?????#else
??????Success?=?1;
?????#endif
???}
??return?Success;
?}

//?************************************************************************** *************************************
/*?????????????????????????????????????????????????????????????????Fermeture? d'une?interface?et?d'une?librairie?*/
void?deCloseDataTypes(?void?){
??#if?defined(?__amigaos4__??)
????MyCloseLibrary(?DataTypesBase,?IDataTypes?);
???#else
????MyCloseLibrary(?DataTypesBase,?NULL?);
???#endif
?}

//?************************************************************************** *************************************
/*?????????????????????????????????????????????????????????????Demande?de?cr& eacute;ation?d'un?buffer?image?en?32?bits?*/
struct?MyPicture?*?AllocPicture32(?int?Width,?int?Height?){
??struct?MyPicture?*pt?=?NULL;
??pt?=?(struct?MyPicture?*)MyAllocVec(?sizeof(?struct?MyPicture?),?MEMF_ANY|M EMF_CLEAR?);
??if?(?pt?){
????pt->Pixels?=?MyAllocVec(?Width?*?(?Height?+?1?)?*?4,?MEMF_ANY|MEMF_CLEAR? );
????pt->Width?=?Width;
????pt->Height?=?Height;
????pt->Depth?=?32;
????if?(?pt->Pixels?==?NULL?){
??????MyFreeVec(?pt?);
??????pt?=?NULL;
?????}
???}
??return?pt;
?}

//?************************************************************************** *************************************
/*?????????????????????????????????????Suppression?d'un?buffer?mémoire ?précédemment?alloué?par?AllocPicture32()?*/
void?FreePicture(?struct?MyPicture?*pt?){
??if?(?pt?){
????MyFreeVec(?pt->Pixels?);
????pt->Pixels?=?NULL;
????MyFreeVec(?pt?);
???}
?}

//?************************************************************************** *************************************
/*????????????????????????????????????????????????????????????Chargement?d'un e?image?en?utilisant?les?DataTypes?*/
struct?MyPicture?*?LoadPicture(?APTR?FileName?){
??struct?MyPicture?*pt?=?NULL;
??Object?*dto?=?NULL;
??ULONG?nb;
??ULONG?*?AvailMethod?=?NULL;
??struct?BitMapHeader?*bmh;
??struct?pdtBlitPixelArray?bpa;
??void?*?bpaptr?=?&bpa;
??if?(?!FileName?)?return?NULL;
??#if?defined(?__amigaos4__?)
????dto?=?IDataTypes->NewDTObject(?(STRPTR)FileName,
???????????????????????????????????DTA_SourceType,????DTST_FILE,
???????????????????????????????????DTA_GroupID,???????GID_PICTURE,
???????????????????????????????????PDTA_DestMode,?????PMODE_V43,
???????????????????????????????????PDTA_Remap,????????TRUE,
???????????????????????????????????OBP_Precision,?????PRECISION_EXACT,
???????????????????????????????????TAG_DONE?);
???#else
????dto?=?NewDTObject(?(STRPTR)FileName,
???????????????????????DTA_SourceType,????DTST_FILE,
???????????????????????DTA_GroupID,???????GID_PICTURE,
???????????????????????PDTA_DestMode,?????PMODE_V43,
???????????????????????PDTA_Remap,????????TRUE,
???????????????????????OBP_Precision,?????PRECISION_EXACT,
???????????????????????TAG_DONE?);
???#endif
??if?(?dto?!=?0?){
????#if?defined(?__amigaos4__?)
??????nb?=?IIntuition->GetAttrs(?dto,?PDTA_BitMapHeader,?&bmh,?TAG_DONE?);
?????#else
??????nb?=?GetDTAttrs(?dto,?PDTA_BitMapHeader,?&bmh,?TAG_DONE?);
?????#endif
????if(?nb?!=?0?){
??????int?resread;
??????/*?Allocation?de?la?structure?Picture?et?du?buffer?mémoire?*/
??????pt?=?AllocPicture32(?bmh->bmh_Width,?bmh->bmh_Height?);
??????if?(?pt?!=?NULL?){
????????bpa.pbpa_PixelData?=?pt->Pixels;
????????bpa.pbpa_PixelFormat?=?PBPAFMT_RGBA;
????????bpa.pbpa_PixelArrayMod?=?bmh->bmh_Width?*?4;
????????bpa.pbpa_Left?=?0;
????????bpa.pbpa_Top?=?0;
????????bpa.pbpa_Width?=?bmh->bmh_Width;
????????bpa.pbpa_Height?=?bmh->bmh_Height;
????????#if?defined(?__amigaos4__?)
??????????AvailMethod?=?IDataTypes->GetDTMethods(?dto?);
??????????if?(?IDataTypes->FindMethod(?AvailMethod,?PDTM_READPIXELARRAY?)?!=? 0?){
????????????bpa.MethodID?=?PDTM_READPIXELARRAY;
????????????resread?=?IIntuition->IDoMethodA(?dto,?bpaptr?);
???????????}
?????????#else
??????????AvailMethod?=?GetDTMethods(?dto?);
??????????if?(?FindMethod(?AvailMethod,?PDTM_READPIXELARRAY?)?!=?0?){
????????????bpa.MethodID?=?PDTM_READPIXELARRAY;
????????????resread?=?DoMethodA(?dto,?bpaptr?);
???????????}
?????????#endif
???????}
?????}
?????#if?defined(?__amigaos4__?)
???????IIntuition->DisposeObject(?dto?);
??????#else
???????DisposeObject(?dto?);
??????#endif
???}
??return?pt;
?}


C'est le contenu de mon fichier libDataTypes_Functions.c
Tu y vois l'ouverture, la fermeture des datatypes (que tu dois déjà conna?tre)
la création et libération d'un buffer mémoire
et le chargement de l'image dans ce buffer mémoire...

Message édité par : AmiDARK / 08-03-2014 21:36

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1821&forum=14