UE4 内存管理测试 FMemory

uint8*pdata = (uint8*)FMemory::Malloc(1024);
    FMemory::Memzero(pdata, 1024);
    uint32 size = (uint32)FMemory::GetAllocSize(pdata);
    UE_LOG(LogTemp, Warning, TEXT("内存大小{%d}!"), size);
    //LogTemp: Warning: 内存大小{1024}!
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符检测大小{0}!
    FString fs = TEXT("1234567890中国");
    FString fn = TEXT("abcdefg人");
    TCHAR*tt = fs.GetCharArray().GetData();
    uint8*ptmp = (uint8*)TCHAR_TO_UTF8(tt);
    int32 fslen = FCStringAnsi::Strlen((ANSICHAR*)ptmp);
    UE_LOG(LogTemp, Warning, TEXT("fs len{%d},{%d}"), fslen, FCString::Strlen(tt));
    //LogTemp: Warning: fs len{16},{12}
    FMemory::Memcpy(pdata, ptmp, fslen);
    UE_LOG(LogTemp, Warning, TEXT("copy 1 %s"), UTF8_TO_TCHAR(ptmp));
    //LogTemp: Warning: copy 1 1234567890中国
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串长度{16}!
    tt = fn.GetCharArray().GetData();
    ptmp = (uint8*)TCHAR_TO_UTF8(tt);
    int32 fnlen = FCStringAnsi::Strlen((ANSICHAR*)ptmp);
    FMemory::Memcpy(pdata + fslen, ptmp, fnlen);
    UE_LOG(LogTemp, Warning, TEXT("copy 2 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 2 1234567890中国abcdefg人
    UE_LOG(LogTemp, Warning, TEXT("字符串长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //======================================================================
    FMemory::Memmove(pdata, pdata + 10, 8);
    UE_LOG(LogTemp, Warning, TEXT("copy 3 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 3 中国ab90中国abcdefg人
    FMemory::Memzero(pdata + 8, 18);
    UE_LOG(LogTemp, Warning, TEXT("copy 3 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 3 中国ab
    UE_LOG(LogTemp, Warning, TEXT("字符串3长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串3长度{8}!
    FMemory::Memmove(pdata, pdata + 3, 5);
    UE_LOG(LogTemp, Warning, TEXT("copy 4 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 4 国ab?ab
    UE_LOG(LogTemp, Warning, TEXT("字符串4长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //LogTemp: Warning: 字符串4长度{6}!
    FMemory::Memzero(pdata + 5, 3);
    UE_LOG(LogTemp, Warning, TEXT("copy 4 %s"), UTF8_TO_TCHAR(pdata));
    //LogTemp: Warning: copy 4 国ab
    UE_LOG(LogTemp, Warning, TEXT("字符串4长度{%d}!"), FCStringAnsi::Strlen((ANSICHAR*)pdata));
    //    //LogTemp: Warning: 字符串4长度{5}!
    FMemory::Free(pdata);

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中实现人脸检测,可以参考以下步骤: 1. 下载并安装OpenCV库,并将其集成到UE4中。可以参考UE4官方文档中的教程进行操作。 2. 在UE4中创建一个新的Actor,并添加一个Render Component用于显示检测结果。 3. 在Actor中编写代码,使用OpenCV的人脸检测算法对图像进行检测。可以使用OpenCV中的CascadeClassifier类实现人脸检测。具体代码可以参考以下示例: ``` #include "opencv2/objdetect.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" void AMyActor::DetectFaces(cv::Mat& Image) { // 加载人脸检测器 cv::CascadeClassifier FaceDetector("haarcascade_frontalface_alt.xml"); // 将图像转换为灰度图像 cv::Mat GrayImage; cv::cvtColor(Image, GrayImage, cv::COLOR_BGR2GRAY); // 进行人脸检测 std::vector<cv::Rect> Faces; FaceDetector.detectMultiScale(GrayImage, Faces, 1.1, 2, 0 | cv::CASCADE_SCALE_IMAGE, cv::Size(30, 30)); // 在图像上绘制人脸矩形框 for (size_t i = 0; i < Faces.size(); i++) { cv::rectangle(Image, Faces[i], cv::Scalar(255, 0, 0), 2); } } ``` 4. 将检测结果传递到Render Component中,进行渲染。可以通过将检测结果转换成UE4的Texture2D格式,并将其绑定到Render Component的材质中来实现。具体代码可以参考以下示例: ``` void AMyActor::UpdateTexture(cv::Mat& Image) { // 将图像转换为Texture2D格式 UTexture2D* Texture = UTexture2D::CreateTransient(Image.cols, Image.rows, PF_B8G8R8A8); Texture->UpdateResource(); uint8* TextureData = static_cast<uint8*>(Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE)); FMemory::Memcpy(TextureData, Image.data, Image.total() * Image.elemSize()); Texture->PlatformData->Mips[0].BulkData.Unlock(); // 将Texture2D绑定到Render Component的材质中 UMaterialInstanceDynamic* MaterialInstance = RenderComponent->CreateAndSetMaterialInstanceDynamic(0); MaterialInstance->SetTextureParameterValue("Texture", Texture); } ``` 需要注意的是,在实际应用中,还需要考虑人脸检测的性能和精度等问题。可以对算法进行优化,或者使用其他更加高效和准确的人脸检测算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值