我这里,不能将图片全放工程之中,需要在外部在加载图片资源,再来使用
1.通过本地图片路径,获取图片,并将其数据转为uint类型的数组
- #pragma region 通过本地图片转换成UTexture2D
- UTexture2D* AMyProjectGameMode::GetLocalTexture(const FString &_TexPath)
- {
- UTexture2D* OutTex=NULL;
- IImageWrapperModule& imageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
- IImageWrapperPtr imageWrapper = imageWrapperModule.CreateImageWrapper(EImageFormat::PNG);
- TArray<uint8> OutArray;
- if(FFileHelper::LoadFileToArray(OutArray, *_TexPath))
- {
- if (imageWrapper.IsValid()&&
- imageWrapper->SetCompressed(OutArray.GetData(), OutArray.Num()))
- {
- const TArray<uint8>* uncompressedRGBA = NULL;
- if (imageWrapper->GetRaw(ERGBFormat::RGBA, 8, uncompressedRGBA))
- {
- const TArray<FColor> uncompressedFColor=uint8ToFColor(*uncompressedRGBA);
- OutTex=TextureFromImage(
- imageWrapper->GetWidth(),
- imageWrapper->GetHeight(),
- uncompressedFColor,
- true);
- }
- }
- }
- return OutTex;
- }
- #pragma endregion
- #pragma region 将uint8数组转为颜色数组
- TArray<FColor> AMyProjectGameMode::uint8ToFColor(const TArray<uint8> origin)
- {
- TArray<FColor> uncompressedFColor;
- uint8 auxOrigin;
- FColor auxDst;
- for (int i = 0; i < origin.Num(); i++) {
- auxOrigin = origin[i];
- auxDst.R = auxOrigin;
- i++;
- auxOrigin = origin[i];
- auxDst.G = auxOrigin;
- i++;
- auxOrigin = origin[i];
- auxDst.B = auxOrigin;
- i++;
- auxOrigin = origin[i];
- auxDst.A = auxOrigin;
- uncompressedFColor.Add(auxDst);
- }
- return uncompressedFColor;
- }
- #pragma endregion
- #pragma region 将颜色数组赋值给Texture
- UTexture2D* AMyProjectGameMode::TextureFromImage(const int32 SrcWidth, const int32 SrcHeight, const TArray<FColor> &SrcData, const bool UseAlpha)
- {
- // 创建Texture2D纹理
- UTexture2D* MyScreenshot = UTexture2D::CreateTransient(SrcWidth, SrcHeight, PF_B8G8R8A8);
- // 锁住他的数据,以便修改
- uint8* MipData = static_cast<uint8*>(MyScreenshot->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE));
- // 创建纹理数据
- 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++;
- }
- }
- // 解锁纹理
- MyScreenshot->PlatformData->Mips[0].BulkData.Unlock();
- MyScreenshot->UpdateResource();
- return MyScreenshot;
- }
- #pragma endregion
- void AMyProjectGameMode::BeginPlay()
- {
- const FString _FilePath = FPaths::GameDir() + "video_logo.png";
- _UITex = GetLocalTexture(_FilePath);
- }
- #include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapper.h"
- #include "Runtime/ImageWrapper/Public/Interfaces/IImageWrapperModule.h"
7.我在读取jpg格式的图片的时候,颜色明显不对,读png的格式的时候,就完全正常,还未去寻找原因
本文转自:http://blog.csdn.net/qq992817263/article/details/52704475