C++ Builder 使用WaterMarkDll动态连接库给图片加水印以防篡改

1,在调用窗体里,Unit1.cpp里引入
#include "WaterMark.h"


2,在窗体加载事件里加载动态库:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
       //初始化水印
       if(!LoadWaterMark())
       {
           ShowMessage("加载水印失败!");
       }
}


3,触发添加水印

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    //添加水印
    AnsiString imgPath="D:\\img\\tempImg.jpg";
    int suc=WaterMarkEmbed(s.c_str(),"water.bmp");
//返回:1成功
//0失败
//-1文件类型不对,或者已经加密过
//-2水印文件不符合,太大
//-3文件有问题,或者文件名不对,文件要带扩展名
}


拷贝WaterMark.cpp和WaterMark.h文件到工程目录中

打开工程文件,点击菜单栏中工程->添加到工程,选中刚拷贝过来的那两个文件

WaterMark.cpp

#include <vcl.h>
#pragma hdrstop

#include "WaterMark.h"
#include <stdio.h>

int (WINAPI *lpfnWaterMarkEmbed)(char * FilePath,char * WaterMarkFilePath);

int (WINAPI *lpfnPicIsTamper)(char* FilePath);

bool LoadWaterMark()
{
       RMDLL=LoadLibrary("WaterMarkDll.dll");
       if (!RMDLL)
                return false;

       (FARPROC )lpfnWaterMarkEmbed=GetProcAddress(RMDLL,"_WaterMarkEmbed@8");         //加载图片
       (FARPROC )lpfnPicIsTamper=GetProcAddress(RMDLL,"_PicIsTamper@4"); // 图片识别用
        return true;
}
//添加水印
int WaterMarkEmbed(char * FilePath,char * WaterMarkFilePath)
{
      return lpfnWaterMarkEmbed(FilePath,WaterMarkFilePath);
}
//验证
int PicIsTamper(char* FilePath)
{
     return lpfnPicIsTamper(FilePath);
}
#pragma package(smart_init)


WaterMark.h

#ifndef WaterMarkH
#define WaterMarkH

HANDLE RMDLL;

bool LoadWaterMark(); //加载水印模块动态连接库

int WaterMarkEmbed(char * FilePath,char * WaterMarkFilePath); 

int PicIsTamper(char* FilePath);

#endif


不提供下载,下载链接为我自己备份使用,内带防篡改图片验证程序,WaterMarkDll.dll和一张水印图,压缩包有密码,请勿下载

黑色头发:http://heisetoufa.iteye.com/

你可能感兴趣的:(C++,c,C#,C++Builder)