Pull to refresh

Comments 3

Спасибо за отзыв. Рад, что статья оказалась полезной!

Оставлю в комментарии апдейт.

  1. Код работает без изменений под 5.1, проверено.

  1. В UE 5.1 добавили коллбэк на HighresShot, теперь на него можно подписаться, и считать картинку из памяти не сохраняя на диск, вот так:

void A_GMB::TakeScreenshot()
{
	FHighResScreenshotConfig& HighResScreenshotConfig = GetHighResScreenshotConfig();
	HighResScreenshotConfig.SetResolution(1920, 1080);
	HighResScreenshotConfig.SetFilename(ScreenshotFileName);

	HighResScreenshotConfig.SetMaskEnabled(false);
	HighResScreenshotConfig.SetHDRCapture(false);
	GEngine->GameViewport->OnScreenshotCaptured().AddUObject(this, &A_GMB::HandleScreenshotData);
	GEngine->GameViewport->GetGameViewport()->TakeHighResScreenShot();
}

void A_GMB::HandleScreenshotData(int32 InSizeX, int32 InSizeY, const TArray<FColor>& InImageData)
{
    TArray64<uint8> CompressedBitmap;
	FImageUtils::PNGCompressImageArray(InSizeX, InSizeY, TArrayView64<const FColor>(InImageData.GetData(), InImageData.Num()), CompressedBitmap);
	
	UE_LOG(LogTemp, Error, TEXT("Screenshot taken"));
	// тут можно запилить новую функцию и передать в нее адрес массива с картинкой
    UploadManager->UploadScreenshot(CompressedBitmap, UploadInfo);
    
}

Для того, чтобы конвертировать TArray64 в TArray можно использовать конструктор вида TArray(CompressedBitmap) из примера выше.

Sign up to leave a comment.

Articles