Filtre Photofiltre en Purebasic ?
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Filtre Photofiltre en Purebasic ?
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
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
Re: Filtre Photofiltre en Purebasic ?
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
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

- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Re: Filtre Photofiltre en Purebasic ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Re: Filtre Photofiltre en Purebasic ?
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...)

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...)
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Re: Filtre Photofiltre en Purebasic ?
Essaie plutôt avec la version C.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Re: Filtre Photofiltre en Purebasic ?
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.

Je vais voir ce que je peux faire.
Re: Filtre Photofiltre en Purebasic ?
poste une dll écrite en c ici , on va t'aider.
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Re: Filtre Photofiltre en Purebasic ?
Merci beaucoup
Voici, je pense, l'essentiel :
Voilà, ça c'est le fichier principal. Ensuite, viennent les deux headers...
Celui qui suit, aucun problème je suppose...
et le fichier ressources...
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 ?

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)));}
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);}
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
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"
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 ?
Re: Filtre Photofiltre en Purebasic ?
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 ?
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 ?
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Re: Filtre Photofiltre en Purebasic ?
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 :
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);}
Re: Filtre Photofiltre en Purebasic ?
Uint , unsigned int , pb ne les gère pas en natif , utilise le .i à la place.
pour ta structure écrit là comme ceci :
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
- DjPoke
- Messages : 121
- Inscription : mar. 02/nov./2010 13:53
- Localisation : Corte, Corse, France
- Contact :
Re: Filtre Photofiltre en Purebasic ?
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.
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.
Re: Filtre Photofiltre en Purebasic ?
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.
en gros un plugin c'est quelques fonction "obligatoire" avec une structure à remplir pour le bon fonctionnement du smilblick.
-
- Messages : 604
- Inscription : lun. 26/avr./2010 16:14
- Localisation : S 48° 52' 31'' / O 123° 23' 33''
Re: Filtre Photofiltre en Purebasic ?
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 a écrit :Uint , unsigned int , pb ne les gère pas en natif , utilise le .i à la place.
Re: Filtre Photofiltre en Purebasic ?
Le code suivant initialise et plante dans photofiltre
, 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

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