创建texture

  • 方式一
  1. void AActor_Assignment2::TextureFromImage_Internal( const TArray<FColor>& SrcData, const bool UseAlpha)
  2. {
  3. const int32 SrcWidth = CanvasSize.X;
  4. const int32 SrcHeight = CanvasSize.Y;
  5. // Create the texture
  6. T_Result = UTexture2D::CreateTransient(CanvasSize.X, CanvasSize.Y, PF_B8G8R8A8);
  7. // Lock the texture so it can be modified
  8. uint8* MipData = static_cast<uint8*>(T_Result->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE));
  9. // Create base mip.
  10. uint8* DestPtr = NULL;
  11. const FColor* SrcPtr = NULL;
  12. for (int32 y = 0; y < SrcHeight; y++)
  13. {
  14. DestPtr = &MipData[(SrcHeight - 1 - y) * SrcWidth * sizeof(FColor)];
  15. SrcPtr = const_cast<FColor*>(&SrcData[(SrcHeight - 1 - y) * SrcWidth]);
  16. for (int32 x = 0; x < SrcWidth; x++)
  17. {
  18. *DestPtr++ = SrcPtr->B;
  19. *DestPtr++ = SrcPtr->G;
  20. *DestPtr++ = SrcPtr->R;
  21. if (UseAlpha)
  22. {
  23. *DestPtr++ = SrcPtr->A;
  24. }
  25. else
  26. {
  27. *DestPtr++ = 0xFF;
  28. }
  29. SrcPtr++;
  30. }
  31. }
  32. // Unlock the texture
  33. T_Result->PlatformData->Mips[0].BulkData.Unlock();
  34. T_Result->UpdateResource();
  35. }
  • 方式二
  1. void AActor_Assignment3::BeginPlay()
  2. {
  3. Super::BeginPlay();
  4. VideoTextureColor = UTexture2D::CreateTransient(640, 480, PF_B8G8R8A8);
  5. VideoTextureColor->UpdateResource();
  6. FUpdateTextureRegion2D* RegionColor = new FUpdateTextureRegion2D(0, 0, 0, 0, 640, 480);
  7. //FUpdateTextureRegionData* ColorRegionData = new FUpdateTextureRegionsData;
  8. // Populate the texture with blue color
  9. TArray<FColor> PixelDepthData;
  10. PixelDepthData.Init(FColor(255, 255, 0, 255), 640 * 480);
  11. VideoTextureColor->UpdateTextureRegions(
  12. (int32)0,
  13. (uint32)1,
  14. RegionColor,
  15. (uint32)(4 * 640),
  16. (uint32)4,
  17. (uint8*)PixelDepthData.GetData()
  18. );
  19. VideoTextureColor->LODGroup = TEXTUREGROUP_Pixels2D;
  20. }

访问Texture数据

  • 方式一
  1. VideoTextureColor->CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap;
  2. VideoTextureColor->MipGenSettings = TextureMipGenSettings::TMGS_NoMipmaps;
  3. VideoTextureColor->SRGB = false; //确保这些设置,否则颜色容易丢失
  4. //VideoTextureColor->LODGroup = TEXTUREGROUP_Pixels2D;
  5. VideoTextureColor->UpdateResource();
  6. FTexture2DMipMap& Mip = VideoTextureColor->PlatformData->Mips[0];
  7. uint8* Data = (uint8*)Mip.BulkData.Lock(LOCK_READ_ONLY);
  8. // read here in low level:
  9. //let's say I want pixel x = 300, y = 23
  10. //basic formula, data[channels * (width * y + x)];
  11. FColor pixelColor = FColor(0, 0, 0, 255);
  12. int x = 200, y = 2;
  13. pixelColor.B = Data[4 * (640 * y + x) + 0];
  14. pixelColor.G = Data[4 * (640 * y + x) + 1];
  15. pixelColor.R = Data[4 * (640 * y + x) + 2];
  16. pixelColor.A = 255;
  17. Mip.BulkData.Unlock();
  18. VideoTextureColor->UpdateResource();
  19. UKismetSystemLibrary::PrintString(GetWorld(), TEXT("font color"), true, true, pixelColor);
  • 方式二

    About ENQUEUE_RENDER_COMMAND 渲染线程

访问材质上的点所对应贴图uv上的颜色

【UE4】读写 Texture 数据的更多相关文章

  1. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  2. IO流-文本IO\读写二进制数据

    文本IO 一.简述 OutputStreamWriter类使用选定的编码方式吧Unicode字符流转换为字节流,InputStreamReader类将包含字节的输入流转为可以产生Unicode字符的读 ...

  3. Linux就这个范儿 第18章 这里也是鼓乐笙箫 Linux读写内存数据的三种方式

    Linux就这个范儿 第18章  这里也是鼓乐笙箫  Linux读写内存数据的三种方式 P703 Linux读写内存数据的三种方式 1.read  ,write方式会在用户空间和内核空间不断拷贝数据, ...

  4. Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式

    Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cut ...

  5. [Java] 读写字节数据,过滤流DataOutputStream和DataInputStream

    package test.stream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io ...

  6. [Java] 读写字符串数据

    package test.stream; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  7. 【转】 Linux内核中读写文件数据的方法--不错

    原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法  有时候需要在Linuxkernel--大 ...

  8. 【原创】大叔经验分享(26)hive通过外部表读写elasticsearch数据

    hive通过外部表读写elasticsearch数据,和读写hbase数据差不多,差别是需要下载elasticsearch-hadoop-hive-6.6.2.jar,然后使用其中的EsStorage ...

  9. 【原创】大叔经验分享(25)hive通过外部表读写hbase数据

    在hive中创建外部表: CREATE EXTERNAL TABLE hive_hbase_table(key string, name string,desc string) STORED BY ' ...

随机推荐

  1. (二)羽夏看C语言——容器

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  2. ABP VNext发布遇到的坑

    本地调试没有问题,发布后通过Token调用其他API时,出现返回JSON中提示:Authorization failed! Given policy has not granted. 需要修改apps ...

  3. 最全Windows版本jemalloc库(5.2.1)及其使用:包含动态库和静态库、x86版本和x64版本、debug版本和release版本

    编写服务器程序时,需要频繁的申请和释放内存,长时间运行会产生大量的内存碎片,这就导致即使当前系统中的闲置内存还足够多,但也无法申请到大的连续可用的内存块,因为此时的物理内存已经千疮百孔像个马蜂窝.此外 ...

  4. request内部转发Demo

    // 转发的Demo1 import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import ja ...

  5. [AtcoderABC200E]Patisserie

    [AtcoderABC200E]Patisserie 题面翻译 对于一个三元组\((i,j,k)\) 我们对它按如下要求进行升序排序: 第一关键词 \(i + j + k\) 即三者总和 第二关键词 ...

  6. 机器学习——EM算法

    1 数学基础 在实际中,最小化的函数有几个极值,所以最优化算法得出的极值不确实是否为全局的极值,对于一些特殊的函数,凸函数与凹函数,任何局部极值也是全局极致,因此如果目标函数是凸的或凹的,那么优化算法 ...

  7. azkaban3.90.0部署

    1.下载这个网友提供的编译包,自己编的老出错,没弄了 https://blog.csdn.net/logincheck/article/details/110119987 2.将 解压到 /opt/m ...

  8. Mysql实现排序

    排序   SELECT     obj.user_id,obj.score,@rownum := @rownum + 1 AS rownum FROM     (         SELECT     ...

  9. Shell系列(38)- 数组操作→取值、遍历、替换、删除

    引言 在Linux平台上工作,我们经常需要使用shell来编写一些有用.有意义的脚本程序.有时,会经常使用shell数组.那么,shell中的数组是怎么表现的呢,又是怎么定义的呢?接下来逐一的进行讲解 ...

  10. Windows 10 64位操作系统 下安装、连接测试sqlite3 sql基本操作 增删改

    一.下载sqlite安装包 1:详细下载安装版本可见官网:https://www.sqlite.org/download.html 2:百度盘分享连接:https://pan.baidu.com/s/ ...