范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

虚幻引擎QR二维码的生成与显示含源码

  这一周我们花了很多时间研究Askutron。由于虚幻引擎对我来说还很新,我每天都在学习。这篇短文是关于我如何弄清楚如何生成和显示QR码。
  如果你想节省时间,你可以试试虚幻商城上任何二维码插件的运气。但这些插件普遍缺乏评论,同时作为程序员的骄傲阻止了我抛出50欧元。
  下面是我的研究步骤: 计算二维码 在运行时从 QR 码生成纹理 使用图像在 UI 中显示该纹理 1、计算二维码
  就像你可能期望的那样,我的旅程始于网络搜索"C++QR code"。第一个结果得出了这样的结果:
  事实上,这个拥有1600颗星的GitHub仓库从一开始就看起来很有希望。此外,文档简明扼要,重要的是,包含简单的示例。
  因此,我继续漫不经心地将CPP文件(QrCode.hpp和QrCode.cpp)复制到虚幻项目的代码文件夹中。这对我来说总是关键时刻。它会编译吗?或者,我将不得不在神秘的C++错误消息上撕掉我的头发。幸运的是,它编译没有任何问题。
  按照网站上的例子和一些基本的虚幻C++知识,计算QR码就像馅饼一样简单: UTexture2D* UWebBuzzers::GenerateQrCode(UObject* parent, FString string) {         auto errorCorrectionLevel = qrcodegen::QrCode::Ecc::LOW;     qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(TCHAR_TO_UTF8(*string), errorCorrectionLevel);      uint8 size = qr.getSize();     TArray pixels;     pixels.SetNumZeroed(size * size);      FColor black = FColor::Black;     FColor white = FColor::White;      for (uint8 x = 0; x < size; x++)     {         for (uint8 y = 0; y < size; y++)         {             FColor color = qr.getModule(x, y) ? white : black;             pixels[x + y * size] = color;         }     }      // TODO: Generate texture from color array (see below) }
  实际的QR计算发生在对 encodeText 的一次调用中。请注意,我选择简单地使用低纠错级别,这使得QR码更小。这是因为在屏幕上显示QR码不太可能受到障碍物或失真的太大影响。
  这非常简单直观。向Nayuki致敬,为这个伟大的库而欢呼! 2、在运行时从 QR 码生成纹理
  下一步是将该颜色数组转换为可以显示的纹理。这甚至更简单,至少在一开始是这样:     FCreateTexture2DParameters params;         UTexture2D* texture = FImageUtils::CreateTexture2D(size, size, pixels, parent, "QRCode", EObjectFlags::RF_Transient, params);      // don"t interpolate texels to get sharp edges (otherwise the image would look blurry)     texture->Filter = TextureFilter::TF_Nearest;
  我正在使用FImageUtils: CreateTexture2D在运行时生成纹理。它的文档 极度 缺少示例代码,就像整个虚幻文档一样。但我最终想出了一组有效的参数: 前两个参数只是以像素为单位的大小,我简单将其设置为QR码的大小("模组"的数量) 像素是上面的 FColor 数组 parent是任何可以传入的 UObject对象,例如通过蓝图。这很重要!如果没有设置 parent,纹理将立即被垃圾回收,或者至少我认为这是正在发生的事情。不设置它将导致编辑器崩溃并出现诸如"对象未打包"之类的错误。 QRCode是纹理的名称,可以自由选择 对于 flags,我不太确定这里需要传递什么。但根据稀疏的文档 我选择RF_Transient - "不保存对象",因为纹理只应该在运行时存在。 最后一个参数 params 允许更改其他一些我什么都不知道的选项,所以我将它们保留为默认值。
  将纹理滤镜设置为 NEAREST(最近邻插值)也很重要。默认滤镜在像素之间使用某种插值,这意味着当纹理被拉伸时,它会变得非常非常模糊。生成的纹理大小仅在 17×17 和 144×144 像素之间,具体取决于编码字符串的长度和纠错级别。
  在编辑器中完美运行。我们完成了,对吧?恐怕不是。虽然此代码在编辑器中按预期运行,但它实际上会在打包的构建中崩溃,并出现以下错误:"控制台不支持构造texture2D",正如我刚刚发现的那样。
  这个解决方案并不漂亮,虚幻的文档再次毫无帮助。所以回到网络搜索。不幸的是,论坛或"AnswerHub"上关于虚幻引擎的许多问题都没有得到解答。Unity社区似乎处于更好的状态。无论如何,我最终找到了一个带有解决方案的帖子(尽管没有解释):     UTexture2D* texture = UTexture2D::CreateTransient(size, size, EPixelFormat::PF_B8G8R8A8, "QRCode");     void* data = texture->PlatformData->Mips[0].BulkData.Lock(LOCK_WRITE);     FMemory::Memcpy(data, pixels.GetData(), size * size * 4);     texture->PlatformData->Mips[0].BulkData.Unlock();     texture->UpdateResource();
  作为一个之前使用DirectX和OpenGL编写C++程序的人,对于"控制台"不支持初始解决方案这个问题,我依然没有任何线索,。也许是因为非方形的纹理大小,但我懒得去测试这个理论。
  无论如何,这是最终代码(另请参阅此Gist): #include "QrCode.hpp" // from https://github.com/nayuki/QR-Code-generator #include "ImageUtils.h" // from Unreal Engine (4.24)  /// Generates a QR code texture from a string. /// UE parent (required) /// String to encode UTexture2D* UWebBuzzers::GenerateQrCode(UObject* parent, FString string) {         qrcodegen::QrCode qr = qrcodegen::QrCode::encodeText(TCHAR_TO_UTF8(*string), qrcodegen::QrCode::Ecc::LOW);      uint8 size = qr.getSize();     TArray pixels;     pixels.SetNumZeroed(size * size);      FColor black = FColor::Black;     FColor white = FColor::White;      for (uint8 x = 0; x < size; x++)     {         for (uint8 y = 0; y < size; y++)         {             FColor color = qr.getModule(x, y) ? white : black;             pixels[x + y * size] = color;         }     }      UTexture2D* texture = UTexture2D::CreateTransient(size, size, EPixelFormat::PF_B8G8R8A8, "QRCode");     void* data = texture->PlatformData->Mips[0].BulkData.Lock(LOCK_WRITE);     FMemory::Memcpy(data, pixels.GetData(), size * size * 4);     texture->PlatformData->Mips[0].BulkData.Unlock();     texture->UpdateResource();      texture->Filter = TextureFilter::TF_Nearest;      return texture; }
  我在这里没有展示的是,我将此函数作为蓝图代码库的一部分公开。如何做到这一点,我不打算在这里介绍,因为这是一种标准的虚幻的东西,应该被文档所涵盖。 3. 使用Image在 UI 中显示该纹理
  要在UI中显示生成的QR码纹理,只需抓取图像,从上面调用蓝图函数,并使用"从纹理设置画笔"将结果设置为图像的纹理。
  大功告成!这就是你在虚幻引擎中生成和显示QR码的方式,就像一个对虚幻引擎几乎一无所知的人一样。如果有一天我学会了更好的方法来做到这一点,我会确保更新这篇文章。
  原文链接:http://www.bimant.com/blog/ue4-qrcode/

同样工龄,早晚差一年退休,养老金为什么晚退休低?在正常情况下,应该是退的越晚,缴纳养老金时间越长,退休后养老金拿的越高。假如出现同样工龄,早晚差一年退休,养老金出现低的情况,这就说明晚退的人,在缴纳养老保险金的基数上,要比早退的上海宝钢集团正式职工退休后,一个月能超过9000退休金吗?宝钢集团成立后,吃掉了上钢五厂,上钢一厂,上海钢管厂,这些在分厂的退休人员所拿的养老金不高的,因为这些分厂的职工大都下岗,或者内部退休了。首先楼主的提问比较笼统,其次现在已经没有宝如果死刑犯在行刑的前一天突发重病,第二天还用执行死刑吗?如果死刑犯在临刑前一天突发重病,还会被执行死刑吗?一个真实的故事告诉你,突发重病之后,该给予的医疗治疗肯定会给予,但同时,该执行的死刑依旧会执行。老张是红丝带死刑犯,红丝带意味着什住在顶楼,水压不够,用不了热水器,怎么办?家里的水压不够确实很糟心,这种问题一般都是出现在高层的老楼房中,其它的地方虽然也有但是出现的几率不大,这也是个人一直不喜欢高层顶楼的原因之一。那么住在顶楼,水压不够用不了热水器怎么同样结交黑道,张无忌甚至当了头子,为什么很多人批评令狐冲,却没人批评张无忌?简单说,你看的时候,是站在了主角视角才觉得奇怪。如果换成书里普通武林人士的视角,再想想看就不奇怪了。首先,令狐冲的独孤九剑和吸星大法,江湖上的大多数人,都不知道令狐冲有这两门无关,为什么别人一眼就看出,你是老实人?哪几点暴露的?1眼神直勾勾。2说话实在,有什么,说什么。3不会说场面话,不会见风使舵。4反应慢,接话慢,理解不了别人说话的含义。5听话,让干什么就干什么。6别人欺负,不会反击,不停退让。7遇到机国企稳定的收入会不会使你觉得没有未来?国企稳定的收入不但不会让我觉得没有未来,反而让我觉得很满意。因为现在疫情迟迟难以结速,市场震荡,什么都不好干,民营企业一样困难,个体小买卖更难做。国有企业船大好掉头,船大抗风浪。在事业副高职称,参公后转为一级主任科员划算吗?怎么会有这种好事?首先,事业副高职称人员在参公后以科员对待,不可能直接转为一级主任科员。其次,参展公务员的一级主任科员在待遇上与副高职称人员有一定区别。老马在林业局下属事业单位,2上世纪九十年左右,那批买非农业户口的人,你现在后悔了吗?当年由农业户口,花了5000大洋买成了非农业户口,现在真是悔青了肠子。那时买非农业户口的目的,是想吃上商品粮,烧上供应煤,参加招工当个工人,想得美美哒。没想到刚买完不久,以前早就吃我贵阳本地人,后悔当年没买花果园买的未来方舟,现置换来得及吗?花果园和未来方舟,2个楼盘都是贵阳近20年来兴起的大型楼盘,而且都是由本土房地产开发商打造,很多都是贵州省内的人买,未来方舟体量上没有花果园大,花果园占地达6000多亩,总建筑面积企业改制,职工档案移交社保局,办理退休须要其他证明,请问不合格档案你是如何交收的?企业改制,职工档案移交社保局,办理退休需要其他证明,请问不合格档案是如何交收的?你说的这种情况的确存在,很多企业改制以后,从原来的国有企业变成了股份制企业或是民营企业,失去了职工档
皮肤黑爱长斑的元凶是什么?哪个成分对黄褐斑效果最好?为什么有些人爱长斑?1基因决定的2黑色素细胞的活性容易长斑的人,相对黑素细胞的活性也高,黑色素颗粒又大又多且不易消失。它包括产生黑色素的能力黑色素的大小黑色素的分布面积和分解速度3皮肤干燥,怎么办?你好,很高兴回答这个问题r皮肤干燥如果是病理性造成的,建议多喝水补充身体水分从而达到水分补充恢复皮肤正常形态,油脂分泌过多的话,可以擦一些水乳来进行水油平衡,玻尿酸也就是透明质酸具克莱因蓝好看吗?突然间全网就开始流行克莱因蓝了?第一次听这名字,点进来想看看这到底是什么色,这不就是宝蓝吗?捂脸这不就是宝蓝色吗,不懂得现在换个名字就高大上了?我觉得看人的身材气质肤色穿搭吧!昨天去接孩子看到一个家长穿了你发的图激光脱毛真的对皮肤无伤害吗?春雨医生来回答这个问题。是的!激光脱毛真的对皮肤无伤害,确实无伤害,肯定无伤害!所以想要夏天脱出美丽露出性感的爱美女士,可以放心地选择激光脱毛。由于激光脱毛的激光种类不同,舒适度可不显老的美人胚子,脸上都有哪些特点?每一个小姐姐都希望自己是天生丽质的美人胚子,可是我们绝大部分的人都不是,有些女生天生皮肤就比较白皙,五官立体并且精致,随着时间的推移,你会发现有些人仿佛不容易老一样,而且年龄越大越月薪4500,想买一款1万2左右的摩托车,外观要好看的,有哪些可以推荐?我是骠骑府!资深摩托车媒体编辑,评论员!月薪4500,买一辆12000左右的摩托车应该不算很败家的行为,骠骑府见过几位工薪族买的还是进口大贸车型,所以,这问题不是买不买得起,而是舍你们觉得王者荣耀里哪个情侣皮肤最好看?5刘备和孙尚香由于他们没有情侣皮肤,就屈居第五名了。4项羽和虞姬虞姬的皮肤确实不错,不过把我们的西楚霸王弄成那样子,就有点过分了。3吕布和貂蝉圣诞恋人的皮肤,确实不错。2小乔和周瑜吃豆角有什么益处?一说起豆角,我想大家的脑海里就会出现一个成型图,但是没有猜错的话,你们要是把你们的图拿出来一比较,就会发现大家居然想的不是同一个东西,真纳闷!今天,我要说的豆角是长豆角,又名豇豆。李云迪这样有钱又有貌的男人,还要花钱找女人?你们怎么看?不知从何时起,世道变了找女朋友一般都要花钱,还要花心思,更要有责任心。花钱嫖娼也是花钱,但更随性,无需负责。前者可以获得认同甚至被认为理所当然,后者属于违法,这就是法律的边界。不管男人心理不成熟的表现有哪些,如何去改善?男人心理不成熟的表现,在不同的人眼中标准是不一样的,这里我们可以说说人的心理不成熟的表现,不仅限于男人的心理。1藏不住心事心理不成熟的人往往藏不住自己的心事,有任何风吹草动或者内心离婚对财产不让步的男人什么心理?你好,属于正常心理。大部分人离婚时已经没有感情了,在没有感情的情况下,为自己争取最大利益是人之常情。可能有人会说,没有感情也有感情基础啊。或许是这样的,确实有部分当事人念及过往的感