/9j/4AAQSkZJRgABAQEASABIAAD/4SUsRXhpZgAASUkqAAgAAAAHAB…
My base64 string image on load pastebin
https://pastebin.com/2Mb0TX69
This my base64 string.
I have stripped this from the line: data:image/jpeg;base64,
Perhaps I am doing something wrong. My texture is breaking and not loading correctly. Take a look at my code and explain what I am doing wrong.
UTexture2D* UMyBlueprintFunctionLibrary::Base64_ToImage(FString Source)
{
TArray<uint8> data_buffer;
bool isDecode = FBase64::Decode(Source, data_buffer);
if (isDecode) {
return CreateBitTextureAtRuntime(data_buffer);
}
else {
return nullptr;
}
}
UTexture2D* UMyBlueprintFunctionLibrary::CreateBitTextureAtRuntime(TArray<uint8>& BGRA8PixelData)
{
const float Resolution = FGenericPlatformMath::Sqrt(BGRA8PixelData.Num() / 4);
UTexture2D * Texture = UTexture2D::CreateTransient(Resolution, Resolution, PF_B8G8R8A8);
FTexture2DMipMap & Mip = Texture->PlatformData->Mips[0];
const int32 BufferSize = BGRA8PixelData.Num();
void* MipBulkData = Mip.BulkData.Lock(LOCK_READ_WRITE);
Mip.BulkData.Realloc(BufferSize);
FMemory::Memcpy(MipBulkData, BGRA8PixelData.GetData(), BufferSize);
Mip.BulkData.Unlock();
Texture->UpdateResource();
return Texture;
}
Image blueprint and problems
1 Like
Did you ever solved this?
Did you ever solved this?
dpotuznik
(dpotuznik)
July 31, 2021, 12:04pm
4
Found it
when you convert base64 data image is a byte array containing the JPG OR PNG FORMAT is not a FColor array.
you can create an texture directly by using :
FImageUtils::ImportBufferAsTexture2D(BGRA8PixelData);
and also you need send only the base64 data , so you need to extract data:image/png;base64,
UTexture2D* ATcpSocketConnection::Base64_ToImage(FString Source)
{
TArray<uint8> data_buffer;
FString Left, Right;
// you need to remove Data:image....,
Source.Split(TEXT(","),&Left,&Right);
if (Right == "") return nullptr;
bool isDecode = FBase64::Decode(Right, data_buffer);
if (isDecode) {
return CreateBitTextureAtRuntime(data_buffer);
}
else {
return nullptr;
}
}
UTexture2D* ATcpSocketConnection::CreateBitTextureAtRuntime(TArray<uint8> BGRA8PixelData)
{
UTexture2D * Texture = FImageUtils::ImportBufferAsTexture2D(BGRA8PixelData);
Texture->MipGenSettings = TMGS_NoMipmaps;
Texture->CompressionSettings = TextureCompressionSettings::TC_VectorDisplacementmap;
Texture->MipGenSettings = TextureMipGenSettings::TMGS_NoMipmaps;
Texture->SRGB = false;
Texture->Filter = TextureFilter::TF_Nearest;
Texture->UpdateResource();
return Texture;
}
hope it’s help
Have a nice day
Daniel
3 Likes
Hi! dpotuznik Could you please share the full function code show me? I’m new guy to C++
Thanks a lot
1 Like
yes, maybe I can find time to post a ready-made solution for new versions