添加水印就是将水印图片与目标图片以一定透明度混合,UE4中获取水印图片和目标图片的原始颜色数据,再将相应的颜色值混合就可以向图片添加水印。比如截图后,对所截取的图片加添水印,或者对本地图片文件添加水印。
1、添加水印代码
/*
InColors:需要添加水印的图像原始颜色数据
InSize:需要添加水印图像的宽(X)和高(Y)
InWaterMarkFile:水印图像文件
InPosition:水印要被添加到的位置,X为水平位置,Y为垂直位置,如果X或Y大于0则是相对左上角,如果小于0则是相对于右下角
*/
void AddWaterMark(TArray<FColor>& InColors, const FIntPoint& InSize, const FString& InWaterMarkFile, const FIntPoint& InPosition)
{
TArray<uint8> WMBuffer;
if (!FFileHelper::LoadFileToArray(WMBuffer, *InWaterMarkFile))
{
return;
}
IImageWrapperModule& ImageWrapperModule = FModuleManager::Get().LoadModuleChecked<IImageWrapperModule>(TEXT("ImageWrapper"));
EImageFormat WMFormat = ImageWrapperModule.DetectImageFormat(WMBuffer.GetData(), WMBuffer.GetAllocatedSize());//可以自动检测文件类型
if (WMFormat == EImageFormat::Invalid)
{
return;
}
TSharedPtr<IImageWrapper> WMImageWrapper = ImageWrapperModule.CreateImageWrapper(WMFormat);
EPixelFormat WMPixelFormat = PF_Unknown;
ERGBFormat WMRGBFormat = ERGBFormat::Invalid;
int32 WMBitDepth = 0;
int32 WMWidth = 0,WMHeight = 0;
if (WMImageWrapper->SetCompressed((void*)WMBuffer.GetData(), WMBuffer.GetAllocatedSize()))
{
WMBitDepth = WMImageWrapper->GetBitDepth();
WMWidth = WM