UCLASS()
class LHCVCTEST_API UMyGameViewportClient : public UGameViewportClient
{
GENERATED_BODY()
protected:
void TakeScreenShot();
virtual void Draw(FViewport* Viewport, FCanvas* SceneCanvas) override;
char m_buf[1920 * 1080 * 3];
};
void UMyGameViewportClient::TakeScreenShot()
{
UWorld * world = GetWorld();
if (world)
{
UGameViewportClient * viewportClient = GEngine->GameViewportForWorld(world);
FSceneViewport * svp = viewportClient->GetGameViewport();
if (svp)
{
TArray <FColor> pixel;
svp->ReadPixels(pixel, FReadSurfaceDataFlags());
int AlignmentWidth = svp->GetSize().X * 3;
while (AlignmentWidth % 4 != 0)
++AlignmentWidth;
int align = AlignmentWidth - svp->GetSize().X * 3;
int j = 0;
for (int i = 0; i < pixel.Num(); i++)
{
m_buf[j++] = pixel[i].B;
m_buf[j++] = pixel[i].G;
m_buf[j++] = pixel[i].R;
if ((i + 1) % svp->GetSize().X == 0)
{
for (int k = 0; k < align; k++)
{
m_buf[j++] = 0;
}
}
}
grabBmp(svp->GetSize().X, svp->GetSize().Y, 0, m_buf);
GEngine->AddOnScreenDebugMessage((uint64)-1, 2.0f, FColor::Emerald, FString::Printf(TEXT("width = %d height = %d num = %d"), svp->GetSize().X, svp->GetSize().Y));
}
}
}
void UMyGameViewportClient::Draw(FViewport* Viewport, FCanvas* SceneCanvas)
{
Super::Draw(Viewport, SceneCanvas);
TakeScreenShot();
}
[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/lhcVCTest")
+ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/lhcVCTest")
+ActiveClassRedirects=(OldClassName="TP_ThirdPersonGameMode",NewClassName="lhcVCTestGameMode")
+ActiveClassRedirects=(OldClassName="TP_ThirdPersonCharacter",NewClassName="lhcVCTestCharacter")
GameViewportClientClassName=/Script/Test.MyGameViewportClient
DefaultEngine.ini