创建texture

  • 方式一
void AActor_Assignment2::TextureFromImage_Internal( const TArray<FColor>& SrcData, const bool UseAlpha)
{
const int32 SrcWidth = CanvasSize.X;
const int32 SrcHeight = CanvasSize.Y;
// Create the texture
T_Result = UTexture2D::CreateTransient(CanvasSize.X, CanvasSize.Y, PF_B8G8R8A8); // Lock the texture so it can be modified
uint8* MipData = static_cast<uint8*>(T_Result->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE)); // Create base mip.
uint8* DestPtr = NULL;
const FColor* SrcPtr = NULL;
for (int32 y = 0; y < SrcHeight; y++)
{
DestPtr = &MipData[(SrcHeight - 1 - y) * SrcWidth * sizeof(FColor)];
SrcPtr = const_cast<FColor*>(&SrcData[(SrcHeight - 1 - y) * SrcWidth]);
for (int32 x = 0; x < SrcWidth; x++)
{
*DestPtr++ = SrcPtr->B;
*DestPtr++ = SrcPtr->G;
*DestPtr++ = SrcPtr->R;
if (UseAlpha)
{
*DestPtr++ = SrcPtr->A;
}
else
{
*DestPtr++ = 0xFF;
}
SrcPtr++;
}
} // Unlock the texture
T_Result->PlatformData->Mips[0].BulkData.Unlock();
T_Result->UpdateResource(); }
  • 方式二
void AActor_Assignment3::BeginPlay()
{
Super::BeginPlay(); VideoTextureColor = UTexture2D::CreateTransient(640, 480, PF_B8G8R8A8);
VideoTextureColor->UpdateResource();
FUpdateTextureRegion2D* RegionColor = new FUpdateTextureRegion2D(0, 0, 0, 0, 640, 480);
//FUpdateTextureRegionData* ColorRegionData = new FUpdateTextureRegionsData; // Populate the texture with blue color
TArray<FColor> PixelDepthData;
PixelDepthData.Init(FColor(255, 255, 0, 255), 640 * 480); VideoTextureColor->UpdateTextureRegions(
(int32)0,
(uint32)1,
RegionColor,
(uint32)(4 * 640),
(uint32)4,
(uint8*)PixelDepthData.GetData()
);
VideoTextureColor->LODGroup = TEXTUREGROUP_Pixels2D; }

访问Texture数据

  • 方式一
	VideoTextureColor->CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap;
VideoTextureColor->MipGenSettings = TextureMipGenSettings::TMGS_NoMipmaps;
VideoTextureColor->SRGB = false; //确保这些设置,否则颜色容易丢失
//VideoTextureColor->LODGroup = TEXTUREGROUP_Pixels2D;
VideoTextureColor->UpdateResource(); FTexture2DMipMap& Mip = VideoTextureColor->PlatformData->Mips[0];
uint8* Data = (uint8*)Mip.BulkData.Lock(LOCK_READ_ONLY);
// read here in low level:
//let's say I want pixel x = 300, y = 23
//basic formula, data[channels * (width * y + x)];
FColor pixelColor = FColor(0, 0, 0, 255);
int x = 200, y = 2;
pixelColor.B = Data[4 * (640 * y + x) + 0];
pixelColor.G = Data[4 * (640 * y + x) + 1];
pixelColor.R = Data[4 * (640 * y + x) + 2];
pixelColor.A = 255; Mip.BulkData.Unlock();
VideoTextureColor->UpdateResource();
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. .NetCore 项目在服务器打包失败解决

    错误描述:NuGet警告 NU3037 NU3028 原因:Nuget无法访问到json所在的网络 2021年1月31日更新:更好的方法 把自动生成的Dockerfile内的AS build 替换成官 ...

  2. Java 登录模块设计

    登录流程 前端登录传输用户名和md5加密后的密码 后端对密码在进行md5加密,或者使用md5加密的密码 + id 进行盐加密,增加密码被破解的难度. 登录成功后,这里分成单体,或者分布式的情况 单体 ...

  3. noip模拟37

    \(\color{white}{\mathbb{燕子来时青尚在,木荫遥看杏花菲,名之以:杏红}}\) 考场发现 \(t2\) 基本上是原题,\(t3\) 的套路见过,\(t4\) 像是并查集之类的算法 ...

  4. es查询--请求body

    查询的JSON结构 普通查询 { "query": { # 查询条件 "match_all": {} //匹配所有文档, 所有 _score 为1.0 # &q ...

  5. TypeError: exchange_declare() got an unexpected keyword argument 'type'

    在设置消息广播时:以下代码会报错channel.exchange_declare(exchange='direct_logs', type='direct')TypeError: exchange_d ...

  6. Android系统编程入门系列之应用数据文件化保存

    应用中关于数据的持久化保存,不管是简单的SharedPreferences还是数据库SQLiteDatabase,本质上都是将数据保存到系统的某种类型的文件中.因此可以直接使用java.io.File ...

  7. 动态规划精讲(一)LC 最长递增子序列的个数

    最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数. 示例 1: 输入: [1,3,5,4,7]输出: 2解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, ...

  8. EditPlus配置C/C++运行环境

    1.安装MinGW和EditPlus 2.打开EditPlus ctrl+1 编译 ctrl+2 运行

  9. 后期静态绑定在PHP中的使用

    什么叫后期静态绑定呢?其实我们在之前的文章PHP中的static中已经说过这个东西了.今天我们还是再次深入的理解一下这个概念. 首先,我们通过一段代码来引入后期静态绑定这一概念: class A { ...

  10. 【PHP】保留两位小数并向上取整

    问题: 一开始我想着数值*100然后向上取整然后再除以一百 $num = 1000 * 0.9634; echo $num; echo '</br>'; $res = ceil($num ...