feat: Enhance base64 generation logic in ScreenshotManager with conditions and skip reasons
This commit is contained in:
parent
3153f38068
commit
4ef265705c
|
@ -519,8 +519,8 @@ namespace CtrEditor.Services
|
|||
result.FileSizeBytes = fileInfo.Length;
|
||||
}
|
||||
|
||||
// Generar base64 si se solicita
|
||||
if (returnBase64)
|
||||
// Generar base64 solo si se cumplen las condiciones restrictivas
|
||||
if (returnBase64 && ShouldGenerateBase64(result))
|
||||
{
|
||||
using (var memoryStream = new MemoryStream())
|
||||
{
|
||||
|
@ -530,6 +530,11 @@ namespace CtrEditor.Services
|
|||
result.Base64Data = Convert.ToBase64String(memoryStream.ToArray());
|
||||
}
|
||||
}
|
||||
else if (returnBase64)
|
||||
{
|
||||
// Informar por qué no se generó el base64
|
||||
result.Base64SkipReason = GetBase64SkipReason(result);
|
||||
}
|
||||
|
||||
result.Timestamp = DateTime.Now;
|
||||
return result;
|
||||
|
@ -543,6 +548,62 @@ namespace CtrEditor.Services
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determina si se debe generar base64 basado en las restricciones de tamaño y cantidad de objetos
|
||||
/// </summary>
|
||||
private bool ShouldGenerateBase64(ScreenshotResult result)
|
||||
{
|
||||
const int MAX_DIMENSION = 1024;
|
||||
|
||||
// Solo permitir base64 para objetos únicos
|
||||
if (result.CaptureType == ScreenshotType.Objects && (result.CapturedObjects?.Count != 1))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verificar dimensiones de la imagen
|
||||
if (result.Bitmap != null)
|
||||
{
|
||||
if (result.Bitmap.PixelWidth > MAX_DIMENSION || result.Bitmap.PixelHeight > MAX_DIMENSION)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// No generar base64 para canvas completo o áreas grandes
|
||||
if (result.CaptureType == ScreenshotType.FullCanvas)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Obtiene la razón por la cual no se generó el base64
|
||||
/// </summary>
|
||||
private string GetBase64SkipReason(ScreenshotResult result)
|
||||
{
|
||||
const int MAX_DIMENSION = 1024;
|
||||
|
||||
if (result.CaptureType == ScreenshotType.FullCanvas)
|
||||
{
|
||||
return "Base64 no generado: Canvas completo excede límites de tokens";
|
||||
}
|
||||
|
||||
if (result.CaptureType == ScreenshotType.Objects && (result.CapturedObjects?.Count != 1))
|
||||
{
|
||||
return $"Base64 no generado: Solo se permite para objetos únicos (encontrados: {result.CapturedObjects?.Count ?? 0})";
|
||||
}
|
||||
|
||||
if (result.Bitmap != null && (result.Bitmap.PixelWidth > MAX_DIMENSION || result.Bitmap.PixelHeight > MAX_DIMENSION))
|
||||
{
|
||||
return $"Base64 no generado: Imagen excede {MAX_DIMENSION}x{MAX_DIMENSION} píxeles (actual: {result.Bitmap.PixelWidth}x{result.Bitmap.PixelHeight})";
|
||||
}
|
||||
|
||||
return "Base64 no generado: Condiciones no cumplidas";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
|
@ -563,6 +624,7 @@ namespace CtrEditor.Services
|
|||
public string Directory { get; set; }
|
||||
public long FileSizeBytes { get; set; }
|
||||
public string Base64Data { get; set; }
|
||||
public string Base64SkipReason { get; set; }
|
||||
public DateTime Timestamp { get; set; }
|
||||
public bool IncludeBackground { get; set; }
|
||||
public List<CapturedObjectInfo> CapturedObjects { get; set; } = new List<CapturedObjectInfo>();
|
||||
|
|
Loading…
Reference in New Issue