#pragma once
namespace ScreenCapture {
// Enums
enum class ImageFormat {
PNG,
JPEG,
BMP,
TIF,
GIF,
GIF_MULTIFRAME,
DDS
};
enum class TiffCompression {
None = 0,
RLE = 1,
LZW = 2,
ZIP = 3
};
enum class DDSCompression {
BC1,
BC2,
BC3,
BC4,
BC5,
BC6H,
BC7,
RGBA
};
// Structures
struct CaptureParams {
std::wstring basePath;
ImageFormat format = ImageFormat::PNG;
float jpegQuality = 85.0f;
float gifDuration = 3.0f;
TiffCompression tiffMode = TiffCompression::None;
DDSCompression ddsMode = DDSCompression::BC7;
std::atomic<bool>* cancelFlag = nullptr;
};
struct CaptureResult {
bool success = false;
std::string message;
std::wstring filepath;
};
// Function declarations - ALL functions used in the cpp file
ImageFormat StringToImageFormat(const std::string& str);
TiffCompression StringToTiffCompression(const std::string& str);
DDSCompression StringToDDSCompression(const std::string& str);
GUID GetWICCodec(ImageFormat format);
std::wstring GetFileExtension(ImageFormat format);
DXGI_FORMAT GetDXGIFormat(DDSCompression compression);
// Helper function declarations
void ConvertRGBAToBGRA(const DirectX::Image* img, uint8_t* bgraData);
HRESULT SetupDesktopDuplication(
Microsoft::WRL::ComPtr<ID3D11Device>& device,
Microsoft::WRL::ComPtr<ID3D11DeviceContext>& context,
Microsoft::WRL::ComPtr<IDXGIOutputDuplication>& duplication
);
HRESULT CaptureSingleFrame(
ID3D11Device* device,
ID3D11DeviceContext* context,
IDXGIOutputDuplication* duplication,
DirectX::ScratchImage& frameImage
);
// Main capture functions
CaptureResult CaptureMultiFrameGIF(const CaptureParams& params);
CaptureResult CaptureScreen(const CaptureParams& params);
HRESULT SaveToWICFile(const DirectX::ScratchImage& image, const CaptureParams& params, const std::wstring& filepath);
}