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;
|
result.FileSizeBytes = fileInfo.Length;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generar base64 si se solicita
|
// Generar base64 solo si se cumplen las condiciones restrictivas
|
||||||
if (returnBase64)
|
if (returnBase64 && ShouldGenerateBase64(result))
|
||||||
{
|
{
|
||||||
using (var memoryStream = new MemoryStream())
|
using (var memoryStream = new MemoryStream())
|
||||||
{
|
{
|
||||||
|
@ -530,6 +530,11 @@ namespace CtrEditor.Services
|
||||||
result.Base64Data = Convert.ToBase64String(memoryStream.ToArray());
|
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;
|
result.Timestamp = DateTime.Now;
|
||||||
return result;
|
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
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -563,6 +624,7 @@ namespace CtrEditor.Services
|
||||||
public string Directory { get; set; }
|
public string Directory { get; set; }
|
||||||
public long FileSizeBytes { get; set; }
|
public long FileSizeBytes { get; set; }
|
||||||
public string Base64Data { get; set; }
|
public string Base64Data { get; set; }
|
||||||
|
public string Base64SkipReason { get; set; }
|
||||||
public DateTime Timestamp { get; set; }
|
public DateTime Timestamp { get; set; }
|
||||||
public bool IncludeBackground { get; set; }
|
public bool IncludeBackground { get; set; }
|
||||||
public List<CapturedObjectInfo> CapturedObjects { get; set; } = new List<CapturedObjectInfo>();
|
public List<CapturedObjectInfo> CapturedObjects { get; set; } = new List<CapturedObjectInfo>();
|
||||||
|
|
Loading…
Reference in New Issue