Filtre Photofiltre en Purebasic ?

Programmation d'applications complexes
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Filtre Photofiltre en Purebasic ?

Message par DjPoke »

Bonjour,

Je me demandais...
Etant donné que les anciens filtres photofiltre sont, à priori, de simples dll, (il y a de très courts exemples en C,C++, Delphi et ASM sur leur site), ne serait-il pas possible de développer des filtres en Purebasic ?
Si oui, pourrais-je avoir un exemple ?

Cela serait intéressant
Merci
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Filtre Photofiltre en Purebasic ?

Message par Backup »

si tu veux avoir une réponse , le mieux c'est de faciliter la tache de ceux qui
voudrons t'aider

avec un lien vers les fameuse DLL
un lien vers les Exemples

voir un code exemple ici meme en C

ça éviterai au gens d'avoir a perdre du temps a chercher tout ça :)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par Progi1984 »

Pour informations, tout en bas de la page : http://www.photofiltre-studio.com/plugins/plugins.htm
:D
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par DjPoke »

Merci :)
Désolé pour cet oubli.

Si je pars du source ASM, je suppose que les directives ".386" et le modèle de mémoire sont inutiles dans Purebasic ?
Arf, ça fait longtemps que je n'ai plus programmé en ASM x86.
(Mes derniers pas en assembleur ont été sur un émulateur Amstrad CPC...)
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par Progi1984 »

Essaie plutôt avec la version C.
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par DjPoke »

Merci, c'est vrai que la version C est plus courte, mais ce langage n'est pas mon fort. :?
Je vais voir ce que je peux faire.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Filtre Photofiltre en Purebasic ?

Message par G-Rom »

poste une dll écrite en c ici , on va t'aider.
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par DjPoke »

Merci beaucoup :)
Voici, je pense, l'essentiel :

Code : Tout sélectionner

//============================================================================
// MODELE DE PLUGIN POUR PHOTOFILTRE ECRIT AVEC BORLAND C++ 5.02  (option C node)
//
// ENTETE POUR BC5 => A REVOIR POUR AUTRE COMPILATEUR
#define DLLEXPORT __declspec(dllexport)	// BC5 Fonctions Exportees
#define STRICT
#define WIN32
#pragma warning(disable:4505)
#pragma hdrstop
// IMPORTANT => 	Calling Convention = StdCall
//                Type de projet Dll 32 Bits standard (Platform:Win32 Target:GUI)
//						Link = "Static Mode" sinon le compilateur ne linkera pas le runtime C
//============================================================================


// INCLUSION HEADERS
#include <windows.h>
#include <windowsx.h>
#include "Ressources.h"
#include "democ.h"


// PROTOTYPES
BOOL WINAPI DllEntryPoint(HINSTANCE hinstDll,DWORD dwReason,LPVOID plvReserved);
extern struct PluginHeader* DLLEXPORT RegisterPluginHeader(void);
extern struct PluginStruct* DLLEXPORT RegisterPluginStruct(void);
extern int DLLEXPORT RegisterCompatibility(void);
extern int DLLEXPORT Execute(void);
extern HBITMAP DLLEXPORT RegisterPluginGlyph(void);
BOOL DialogProc(HWND hWin,UINT uMsg,WPARAM wParam,LPARAM lParam);
void Affiche(void);

//  VARIABLES GLOBALES
HINSTANCE hInstance;
struct PluginHeader	PHeader;
struct PluginStruct	PStruct;
struct SIMAGE Img;

// SPECIFIQUE PLUGIN
HWND	hDlg;     // Handle DialogBox
INT		Couche; 	// Masque de couche
INT		RetValue; // Retour de la boucle de message
INT		IsInit;		// Autorise/interdit l'affichage
HWND	HROUGE;		// Handle ChekBox Rouge
HWND	HVERT;		// Handle ChekBox Vert
HWND	HBLEU;		// Handle ChekBox Bleu


// DESCRIPTEURS PLUGIN
char HeaderCaption[] = {"Demo Filtre (C)"};
char HeaderVersion[] = {"Version 1.0"};
char HeaderAuthor[] =  {"P@F"};
char HeaderCommentaire[] = {"Conserve ou efface les couches R-V-B.\xA\xD"
														"Plugin de test écrit en C.\xA\xD"
                            "Nécessite PhotoFiltre 5.6 minimum."};
int HeaderPluginType = PT_FILTER;
int HeaderPluginFlag = MF_RGB_COLORS + MF_NEED_IMAGE;

//=========================================================================
// POINT D'ENTREE DU PLUGIN
//=========================================================================
#pragma argsused  // Pour eviter le warning: Parameter '' is never used
BOOL WINAPI DllEntryPoint(HINSTANCE hinstDll,DWORD dwReason,LPVOID plvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH) // Raison d'appel
	{
  hInstance = hinstDll; 	// Recupere l'instance dll du plugin
  // Les structures a zero
	ZeroMemory(&PStruct,sizeof(struct PluginStruct));	// Les structures a zero
  ZeroMemory(&PHeader,sizeof(struct PluginHeader));
  ZeroMemory(&Img,sizeof(struct SIMAGE));
  // Intialisation de la structure d'entete du plugin
	strcpy(PHeader.Caption,HeaderCaption);
	strcpy(PHeader.Version,HeaderVersion);
	strcpy(PHeader.Author,HeaderAuthor);
	strcpy(PHeader.Commentaire,HeaderCommentaire);
	PHeader.PluginType=HeaderPluginType;
	PHeader.Flags=HeaderPluginFlag;
	return(1);	// C'est tout bon !
  }
else
	return(0);	// Les autres raisons d'appel => Niet !
}

//=========================================================================
// FONCTION D'EXECUTION DU PLUGIN
//=========================================================================
extern int DLLEXPORT Execute(void)
{
//==== TEST DE LA VERSION PHOTOFILTRE ET DE LA COMPATIBILITE
// Si RegisterCompatibility retourne 1 ou la version ne gere pas
// la compatibilité niveau 2 => les fonctions niveau 2 sont initialisées a zéro
if (PStruct.TPrepareDialogue == 0)
	{
   MessageBox(NULL,
		"Ce plugin est incompatible avec cette version de PhotoFiltre.\xD\xA"
    "Il Nécessite la version 5.6 minimum.\xD\xA"
    "Vous pouver la télécharger sur le site officiel:\xD\xA"
    "http://www.photofiltre.com/","Ancienne version de PhotoFiltre",
    MB_OK | MB_ICONINFORMATION);
   return(0); // Une petite MsgBox pour etre poli !
   };

//==== DEBUT DU FILTRE (Pour le curseur "sablier" => mettre 1 au lieu de dFALSE
(*PStruct.TBeginFilter)(HeaderCaption,dFALSE); // Signaler le debut a PhotoFiltre
// Lancer Visuel avec hParent = NUL => on laisse PhotoFiltre gerer le mode Modal
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),NULL,DialogProc); // Lancer Visuel

//==== FIN DU FILTRE
(*PStruct.TEndFilter)(); // Signaler la fin a PhotoFiltre

//==== LIBERE L'IMAGE
if ( Img.piBitmap != NULL) // Un petit test pour eviter toute mauvaise surprise
	(*PStruct.TFreeDBmp)(&Img);

return(RetValue); // Valeur retournée par le Visuel (1=Modif, 0=NoModif)
}

//=========================================================================
// DialogProc  => Visuel
// Boucle de message de la boite de dialogue
//=========================================================================
#pragma argsused  // Pour eviter le warning: Parameter '' is never used
BOOL CALLBACK DialogProc(HWND hWin,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
	{
   case WM_INITDIALOG:
   	//== Init VARIABLES ============================
		hDlg = hWin;						// Handle de la boite de dialogues
		IsInit = 0; 						// Interdire l'affichage pour le momment
		Couche = 0;             // Masque de couche
		RetValue = 0;						// Image non modifiée
		Img.piBitmap = NULL;		// Pour etre sur de l'allocation future...

   	//== Init DIALOGBOX ============================
   	SendMessage(hWin,WM_SETICON,ICON_BIG,(LPARAM)LoadIcon(hInstance,(LPSTR)500));

   	//== Init CHECKBOX ============================
   	HROUGE = GetDlgItem(hWin,IDC_ROUGE); 	// Rouge
   	HVERT = GetDlgItem(hWin,IDC_VERT); 		// Vert
   	HBLEU = GetDlgItem(hWin,IDC_BLEU); 		// Bleu
   	SendMessage(HROUGE,BM_SETCHECK,BST_CHECKED,0);
   	SendMessage(HVERT,BM_SETCHECK,BST_CHECKED,0);
   	SendMessage(HBLEU,BM_SETCHECK,BST_CHECKED,0);

   	//== Demande Dialogue Modal a PhotoFiltre ============================
   	(*PStruct.TPrepareDialogue)(hDlg,DM_MODAL,dFALSE,dFALSE);

   	//== Creation de l'image a la bonne taille ============================
   	// Les Rectangles Delphi sont relatifs a l'origine
    // Si il n'y a pas de selection, le rectangle decrit l'image entiere
    Img.piWidth = PStruct.SelRect.right - PStruct.SelRect.left;
    Img.piHeight = PStruct.SelRect.bottom - PStruct.SelRect.top;

		(*PStruct.TCreateDBmp)(&Img);
		if ( Img.piBitmap == NULL)
			{(*PStruct.TEndFilter)();return(0);}

		IsInit=1; 		// Permetre l'affichage
		return(TRUE);
//== Fin de WM_INITDIALOG ============================

	//== WM_COMMAND ======================
	case WM_COMMAND:
      switch(wParam)
      //switch(LOWORD(wParam))
			{
   		//== BOUTON ANNULER ======================
   		case IDC_CANCEL:
   			EndDialog(hWin,FALSE);break;

			//== BOUTON OK ======================
   		case  IDC_OK:
				RetValue=1;
        EndDialog(hWin,TRUE);break;

   		//== CHECKBOX Rouge ======================
   		case IDC_ROUGE:
				if (SendMessage(HROUGE,BM_GETCHECK,0,0) == BST_UNCHECKED)
					Couche |= 1 ;
				else
					Couche &= 0xFFFFFFFE;
      	Affiche();
      	break;

   		//== CHECKBOX Vert ======================
   		case IDC_VERT:
				if (SendMessage(HVERT,BM_GETCHECK,0,0) == BST_UNCHECKED)
         Couche |= 2;
				else
					Couche &= 0xFFFFFFFD;
   			Affiche();
      	break;

  		//== CHECKBOX Bleu ======================
   		case IDC_BLEU:
				if (SendMessage(HBLEU,BM_GETCHECK,0,0) == BST_UNCHECKED)
         Couche |= 4;
				else
      		Couche &= 0xFFFFFFFB;
				Affiche();
      	break;

  		//== DEFAULT COMMAND PROCESS MESSAGE ======================
      default:
      	return(FALSE); // On traite pas le message

		//== FIN DE WM_COMMAND ======================
    } break; //==================================

  //== WM_CLOSE ======================
  case WM_CLOSE:
   	EndDialog(hWin,TRUE);

  //== DEFAUT GLOBAL PROCESS MESSAGE ======================
  default:
  	return(FALSE); // On traite pas le message

//*******************************************************************
	}//== FIN DE LA BOUCLE DE MESSAGE ======================
return(TRUE); // On envois au traitement les autres messages
}


//=========================================================================
// FONCTION D'AFFICHAGE (Pour info)
//=========================================================================
void Affiche(void)
{
UINT CptX,CptY,Tx;
UCHAR *Ptr;

if (!IsInit)
	return; 

//==== RESTAURATION DE L'IMAGE ET RECUPERATION DANS LE BUFFER D'IMAGE
TRestoreUndoBitmap(&PStruct);
(*PStruct.TGetSelBitmap)(Img.piBitmap);

//==== MODIFICATION DU BUFFER D'IMAGE
(*PStruct.TGetScanLineDBmp)(&Img,0);
Ptr = Img.piBuffer;
Tx = Img.piWidth * 3 ;
for (CptY=0; CptY < Img.piHeight ; CptY ++)
	{
	for (CptX=0; CptX < Tx ; CptX +=3)
   	{
    if ((Couche & 4))
    	Ptr[CptX]=0;	// Bleu
    if ((Couche & 2))
    	Ptr[CptX+1]=0;	// Vert
    if ((Couche & 1))
    	Ptr[CptX+2]=0;	// Rouge
    };
   Ptr -= (Img.piScanlineSize);
	};

//==== ACTUALISATION DE L'IMAGE
(*PStruct.TSetSelBitmap)(Img.piBitmap,SF_AUTO);
}

//=========================================================================
// FONCTIONS EXPORTEES
//=========================================================================
extern struct PluginHeader* DLLEXPORT RegisterPluginHeader(void)
{return(&PHeader);}
//-------------------------------------------------------------------------
extern struct PluginStruct* DLLEXPORT RegisterPluginStruct(void)
{return(&PStruct);}
//-------------------------------------------------------------------------
extern int DLLEXPORT RegisterCompatibility(void)
{return(NON_DELPHI);}
//-------------------------------------------------------------------------
extern HBITMAP DLLEXPORT RegisterPluginGlyph(void)
{return(LoadBitmap(hInstance,(LPTSTR)600));}
// OU => {return(LoadBitmap(hInstance,MAKEINTRESOURCE(600)));}


Voilà, ça c'est le fichier principal. Ensuite, viennent les deux headers...

Code : Tout sélectionner

//;********************************************************************
//; CONSTANTES PhotoFiltre
//;********************************************************************
#define	RGBColorCount = 256 * 256 * 256 ; 16 millions de couleurs
#define	MaxLongStr 256
#define	MaxShortStr 64

	// Compatibilité Delphi/Non Delphi
#define	DELPHI  1
#define	NON_DELPHI 2

  // type du plugin
#define	PT_FILTER 0
#define	PT_IMAGE 1
#define	PT_FILE_IMPORT 2
#define	PT_FILE_EXPORT 3
#define	PT_TOOL 4

// mode de dialogue
#define	DM_MODAL 0
#define	DM_PREVIEW 1
#define	DM_COLOR_PICKER 2

// flags de sélection
#define	SF_AUTO 0
#define	SF_NONE 1

// flags pour la création d'image
#define	IF_CREATE 0
#define	IF_FILE 1

// flags pour l'activation du menu
#define	MF_RGB_COLORS 0x00000001
#define	MF_INDEXED_COLORS 0x00000002
#define	MF_TRANSPARENT 0x00000004
#define	MF_NOT_TRANSPARENT 0x00000008
#define	MF_SELECTED 0x00000010
#define	MF_NOT_SELECTED 0x00000020
#define	MF_NEED_IMAGE 0x00000040
#define	MF_NEED_MORE_THAN_ONE_IMAGE 0x00000080

// test sur l'extension du fichier en cours
#define	MF_IMAGE_JPEG 0x00010000
#define	MF_IMAGE_GIF 0x00020000
#define	MF_IMAGE_PNG 0x00040000
#define	MF_IMAGE_BMP 0x00080000
#define	MF_IMAGE_TIFF 0x00100000
#define	MF_IMAGE_PFS 0x00200000

// === CONSTANTES FALSE/TRUE POUR DELPHI
#define	dFALSE 0
#define	NIL NULL

//;********************************************************************
//; DESCRIPTION DE LA STRUCTURE D'IMAGE
//;********************************************************************
typedef 		UINT 	DBITMAP;	// Objet Delphi TBitmap
typedef 		UINT 	DFORM;		// Objet Delphi TForm
struct		SIMAGE
	{
  UINT		piSize; 				// Taille de la structure en Octets
  UINT		piWidth;				// Taille X Utile en Pixels
  UINT		piHeight;				// Taille Y Utile en Pixels
  UINT		piWidthSize;		// Taille X Utile en Octets
  UINT		piScanlineSize;	// Taille D'une ScanLine complete en Octets
  UINT		piByteCount;		// NB D'octets par Pixels 
  UINT		piDataSize;			// Taille Totale du Buffer en Octets
  UCHAR*	piBuffer;				// Adresse Buffer
  DBITMAP	piBitmap;				// Pointeur Delphi TBitmap
  HBITMAP	piHandle;				// Pointeur HBitmap
	};

//;********************************************************************
//; DESCRIPTION DES STRUCTURES PHOTOFILTRE
//;********************************************************************
//;=== STRUCTURE D'ENTETE DU PLUGIN
struct		PluginHeader
	{
	char		Caption[MaxShortStr+1];
  char		Version[MaxShortStr+1];
  UINT		PluginType;
  char		Author[MaxShortStr+1];
  char		Commentaire[MaxShortStr+1];
	char		Reserved[MaxShortStr+1];
	UINT		Flags; 								
	};

//;=== STRUCTURE D'EXECUTION DU PLUGIN
struct		PluginStruct
	{
  // Compatibilité Niveau 1
  HWND 	MainHandle;
  INT		ImageExists;
  INT		Selected;
  RECT	SelRect;
  RECT	ImgRect;
  INT		XP_ThemesEnabled;
  INT (*TBeginFilter)(char* Message,int Sablier);
  INT (*TEndFilter)(void);
  INT (*TGetBitmap)(DBITMAP DelphiBitmap);
  INT (*TSetBitmap)(DBITMAP DelphiBitmap);
  INT (*TGetSelBitmap)(DBITMAP DelphiBitmap);
  INT (*TSetSelBitmap)(DBITMAP DelphiBitmap,UINT SelectOption);
  INT (*TGetTransparentColor)();
  INT (*TSetTransparentColor)(UINT Couleur);
  INT (*TGetColorCount)();
  INT (*TSetColorCount)(INT ColorCount);
  INT (*TNewImage)(DBITMAP DelphiBitmap,char* FileName,INT ImageOption,INT ColorCount,UINT TransColor);
  INT (*TShowForm)(DFORM TForm,INT DialogOption,INT MainFormCenter,INT CloseWaiting);
  INT (*TSetAlphaBlend)(INT AlphaRange);
  INT (*TDrawSelBorder)(INT Width,UINT Couleur,INT Antialias);
  INT (*TGetSelMask)(DBITMAP DelphiBitmap);
  void (*TResetSaveMenu)();
  INT (*TGetImgFileName)(char *PlPath,INT Taille);
  INT (*TGetExePath)(char *PlPath,INT Taille);
  INT (*TGetOpenPath)(char *PlPath,INT Taille);
  INT (*TGetSavePath)(char *PlPath,INT Taille);
  INT (*TGetPluginPath)(char *PlPath,INT Taille);
  INT (*TGetIniFile)(char *PlPath,INT Taille);
  INT (*TSetImgFileName)(char *PlPath);
  INT (*TGetBitmapByName)(DBITMAP DelphiBitmap,char* FileName);
  INT (*TGetThumb)(DBITMAP DelphiBitmap,UINT BkColor,
  			INT BorderSize,INT ShadowSize,UINT ShadowBkColor,RECT* R);
  INT (*TGetThumbByName)(DBITMAP DelphiBitmap,char* FileName,UINT BkColor,
  			INT BorderSize,INT ShadowSize,UINT ShadowBkColor,RECT* R);
  INT (*TEnumImages)(char* FileName,INT Width,INT Height,INT NbColor,UINT TransColor);
  // Compatibilité Niveau 2
  INT (*TPrepareDialogue)(HWND HandleF,INT DialogOption,INT MainFormCenter,INT CloseWaiting);
  INT (*TCreateDBmp)(struct SIMAGE *BitmapIn);
	INT (*TFreeDBmp)(struct SIMAGE *BitmapIn);
	HDC (*TReleaseHandleDBmp)(struct SIMAGE *BitmapIn);
	INT (*TGetScanLineDBmp)(struct SIMAGE *BitmapIn,UINT Row);
	INT	(*Reserve1)(void);
	INT	(*Reserve2)(void);
	INT	(*Reserve3)(void);
	INT	(*Reserve4)(void);
	INT	(*Reserve5)(void);
	};

//=========================================================================
// FONCTIONS AUXILIAIRES
//=========================================================================
void TRestoreUndoBitmap(struct PluginStruct* Pls);
void TRestoreUndoBitmap(struct PluginStruct* Pls)
{(*Pls->TSetBitmap)(NULL);}

Celui qui suit, aucun problème je suppose...

Code : Tout sélectionner

#define IDD_MAIN					1
#define IDI_BITMAP				600
#define IDI_ICON1					500
#define IDC_STATICFRAME1	103
#define IDC_CANCEL				102
#define IDC_OK						101
#define IDC_BLEU					107
#define IDC_VERT					106
#define IDC_ROUGE					105
#define IDC_CHECKBOX1			105
#define IDC_CHECKBOX2			106
#define IDC_CHECKBOX3			107

et le fichier ressources...

Code : Tout sélectionner

#include "Ressources.h"

//=====================================================
IDD_MAIN DIALOGEX 0, 0, 107, 78
EXSTYLE WS_EX_TOPMOST | WS_EX_APPWINDOW
STYLE DS_SYSMODAL | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Demo Filtre (C)"
FONT 8, "MS Sans Serif"
{
 CONTROL "&Annuler", IDC_CANCEL, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 60, 46, 14
 CONTROL "&Ok", IDC_OK, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 58, 60, 46, 14
 CONTROL "Afficher La Couche &Verte", IDC_VERT, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 24, 92, 9
 CONTROL "Afficher La Couche &Rouge", IDC_ROUGE, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 8, 96, 9
 CONTROL "Afficher La Couche &Bleue", IDC_BLEU, "button", BS_AUTOCHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 4, 40, 96, 9
 CONTROL "Frame1", IDC_STATICFRAME1, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 4, 56, 100, 1
}


//=================================================
//== ICONES
500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "Democ.ico"

//=================================================
//== BITMAP
600 BITMAP MOVEABLE PURE LOADONCALL DISCARDABLE "Democ.bmp"
Je vais commencer par convertir ce que je sais convertir.
Déjà, la partie qui me gène est celle qui fait référence au type "RECT" qui est un simple rectangle, mais qui ne semble pas défini dans les sources.
Que pourrais-je faire ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Filtre Photofiltre en Purebasic ?

Message par G-Rom »

Le logiciel est opensource ?
si oui , via un .pbi , tu colles toutes les constante définie par #define truc 0x000...
ensuite tu as une structure PluginHeader & PluginStruct a mettre en place. ( les infos de ton plugin )
en réécrivant les fonctions de la dll , tu devra remplir ces structures dans la fonction DllEntryPoint()
sa marche sous linux ca ?
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par DjPoke »

En fait, il y a deux version du logiciel, une gratuite et une shareware, qui hélas, ne sont pas opensource.
Elles ne marchent, il me semble, que sous windows.

Pour les quelques constantes de base, je les ai converti.
Ensuite, étape 2, je bloque sur les UINT par exemple.
Voici le morceau de code sur lequel je bloque :

Code : Tout sélectionner

;********************************************************************
; DESCRIPTION DES STRUCTURES PHOTOFILTRE
;********************************************************************
;=== STRUCTURE D'ENTETE DU PLUGIN
Structure		PluginHeader
	Caption(#MaxShortStr+1).c
  Version(#MaxShortStr+1).c
  UINT		PluginType;
  Author(#MaxShortStr+1).c
  Commentaire(#MaxShortStr+1).c
	Reserved(#MaxShortStr+1).c
	UINT		Flags; 								
EndStructure

;=== STRUCTURE D'EXECUTION DU PLUGIN
Structure		PluginStruct
  HWND 	MainHandle;
  ImageExists.i;
  Selected.i;
  RECT	SelRect;
  RECT	ImgRect;
  XP_ThemesEnabled.i;
  Int (*TBeginFilter)(char* Message,int Sablier);
  Int (*TEndFilter)(void);
  Int (*TGetBitmap)(DBITMAP DelphiBitmap);
  Int (*TSetBitmap)(DBITMAP DelphiBitmap);
  Int (*TGetSelBitmap)(DBITMAP DelphiBitmap);
  Int (*TSetSelBitmap)(DBITMAP DelphiBitmap,UINT SelectOption);
  Int (*TGetTransparentColor)();
  Int (*TSetTransparentColor)(UINT Couleur);
  Int (*TGetColorCount)();
  Int (*TSetColorCount)(INT ColorCount);
  Int (*TNewImage)(DBITMAP DelphiBitmap,char* FileName,INT ImageOption,INT ColorCount,UINT TransColor);
  Int (*TShowForm)(DFORM TForm,INT DialogOption,INT MainFormCenter,INT CloseWaiting);
  Int (*TSetAlphaBlend)(INT AlphaRange);
  Int (*TDrawSelBorder)(INT Width,UINT Couleur,INT Antialias);
  Int (*TGetSelMask)(DBITMAP DelphiBitmap);
  void (*TResetSaveMenu)();
  Int (*TGetImgFileName)(char *PlPath,INT Taille);
  Int (*TGetExePath)(char *PlPath,INT Taille);
  Int (*TGetOpenPath)(char *PlPath,INT Taille);
  Int (*TGetSavePath)(char *PlPath,INT Taille);
  Int (*TGetPluginPath)(char *PlPath,INT Taille);
  Int (*TGetIniFile)(char *PlPath,INT Taille);
  Int (*TSetImgFileName)(char *PlPath);
  Int (*TGetBitmapByName)(DBITMAP DelphiBitmap,char* FileName);
  Int (*TGetThumb)(DBITMAP DelphiBitmap,UINT BkColor,
  			INT BorderSize,INT ShadowSize,UINT ShadowBkColor,RECT* R);
  Int (*TGetThumbByName)(DBITMAP DelphiBitmap,char* FileName,UINT BkColor,
  			INT BorderSize,INT ShadowSize,UINT ShadowBkColor,RECT* R);
  Int (*TEnumImages)(char* FileName,INT Width,INT Height,INT NbColor,UINT TransColor);
  // Compatibilité Niveau 2
  Int (*TPrepareDialogue)(HWND HandleF,INT DialogOption,INT MainFormCenter,INT CloseWaiting);
  Int (*TCreateDBmp)(struct SIMAGE *BitmapIn);
	Int (*TFreeDBmp)(struct SIMAGE *BitmapIn);
	HDC (*TReleaseHandleDBmp)(struct SIMAGE *BitmapIn);
	Int (*TGetScanLineDBmp)(struct SIMAGE *BitmapIn,UINT Row);
	Int	(*Reserve1)(void);
	Int	(*Reserve2)(void);
	Int	(*Reserve3)(void);
	Int	(*Reserve4)(void);
	Int	(*Reserve5)(void);
EndStructure
;=========================================================================
; FONCTIONS AUXILIAIRES
;=========================================================================
void TRestoreUndoBitmap(struct PluginStruct* Pls);
void TRestoreUndoBitmap(struct PluginStruct* Pls)
{(*Pls->TSetBitmap)(NULL);}
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Filtre Photofiltre en Purebasic ?

Message par G-Rom »

Uint , unsigned int , pb ne les gère pas en natif , utilise le .i à la place.

pour ta structure écrit là comme ceci :

Code : Tout sélectionner

Structure PluginHeader
  Array Caption.c(#MaxShortStr+1)
  Array Version.c(#MaxShortStr+1)
  PluginType.i
  Array Author.c(#MaxShortStr+1)
  Array Commentaire.c(#MaxShortStr+1)
  Array Reserved.c(#MaxShortStr+1)
  Flags.i                       
EndStructure
Avatar de l’utilisateur
DjPoke
Messages : 121
Inscription : mar. 02/nov./2010 13:53
Localisation : Corte, Corse, France
Contact :

Re: Filtre Photofiltre en Purebasic ?

Message par DjPoke »

Merci, mais j'ai l'impression que c'est cuit, car le source fait appel à certaines structures qui sont internes à l'univers de Borland.
Je crois qu'à moins de trouver les codes sources des "includes" de chez borland, c'est même pas la peine.
Donc, autant abandonner.

Merci beaucoup en tout cas pour votre aide.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Filtre Photofiltre en Purebasic ?

Message par G-Rom »

borland c'est un compilo , à quoi tu fait référence en particulier ? il y a beaucoup de superflu dans le code en c.
en gros un plugin c'est quelques fonction "obligatoire" avec une structure à remplir pour le bon fonctionnement du smilblick.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: Filtre Photofiltre en Purebasic ?

Message par boddhi »

G-Rom a écrit :Uint , unsigned int , pb ne les gère pas en natif , utilise le .i à la place.
Si je ne me trompe pas, un .i équivaut à .l sur OS 32bits, vaudrait peut-être mieux utiliser un double .d plutôt, non ?
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Filtre Photofiltre en Purebasic ?

Message par G-Rom »

Le code suivant initialise et plante dans photofiltre :D , j'ai pas le temps d'aller plus loin , désolé , mais en fouillant un peu
dans la doc sur le web , y a pas mal d'explication, tu devrais t'en sortir un peu plus ;)
pense à enregistré ta dll en .pfl

Code : Tout sélectionner

#MaxLongStr = 256
#MaxShortStr = 64
#RGBColorCount = 256*256*256
#PT_FILTER = 0
#PT_IMAGE = 1
#PT_FILE_IMPORT = 2
#PT_FILE_EXPORT = 3
#PT_TOOL = 4
#MF_RGB_COLORS = $00000001
#MF_NEED_IMAGE = $00000040

Structure _Rect_
  x.i
  y.i
  w.i
  h.i
EndStructure

Structure PluginStruct
  MainHdw.i
  ImageExist.i
  Selected.i
  SelRect._Rect_
  ImgRect._Rect_
  XP_Theme.i
  *BlackHole.i[37] ; Plein de truc qu'en s'en fou pr le moment...
EndStructure

    
Structure PluginHeader
  *Caption.c
  *Version.c
  PluginType.i
  *Author.c
  *Reserved.c
  Flags.i
EndStructure

Global MyPluginHeader.PluginHeader
Global MyPluginStruct.PluginStruct

ProcedureDLL.b DllEntryPoint(hinstDll,dwReason,plvReserved)
  
MyPluginHeader\Caption     = AllocateMemory(#MaxShortStr+1)
MyPluginHeader\Version     = AllocateMemory(#MaxShortStr+1)
MyPluginHeader\PluginType  = #PT_FILTER
MyPluginHeader\Author      = AllocateMemory(#MaxShortStr+1)
MyPluginHeader\Reserved    = AllocateMemory(#MaxShortStr+1)
MyPluginHeader\Flags       = #MF_RGB_COLORS | #MF_NEED_IMAGE
  
  
PokeS(@MyPluginHeader\Author,"Jérôme")
PokeS(@MyPluginHeader\Version,"2")
PokeS(@MyPluginHeader\Caption,"Test de plugin")
  
  ProcedureReturn 1
EndProcedure

ProcedureDLL.i RegisterCompatibility()
  ProcedureReturn 2
EndProcedure

ProcedureDLL.i RegisterPluginHeader()
  ProcedureReturn @MyPluginHeader
EndProcedure

ProcedureDLL.i RegisterPluginStruct()
  ProcedureReturn @MyPluginStruct
EndProcedure

ProcedureDLL.i RegisterPluginGlyph()
  ProcedureReturn ImageID(CatchImage(#PB_Any,?ico))
EndProcedure

ProcedureDLL.i Execute()
  MessageRequester("Coucou !","C'est un filtre bidon!")
  
  ProcedureReturn 0 ;(0 = non modifié , 1 image modifié)
EndProcedure


DataSection
  ico:
  IncludeBinary "Democ.ico"
EndDataSection

Répondre