diff --git a/Services/ScreenshotManager.cs b/Services/ScreenshotManager.cs index 60e0438..803ac7d 100644 --- a/Services/ScreenshotManager.cs +++ b/Services/ScreenshotManager.cs @@ -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 } } + /// + /// Determina si se debe generar base64 basado en las restricciones de tamaño y cantidad de objetos + /// + 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; + } + + /// + /// Obtiene la razón por la cual no se generó el base64 + /// + 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 CapturedObjects { get; set; } = new List();