diff --git a/ScreenToGif.Model/Enums/MouseButtons.cs b/ScreenToGif.Model/Enums/MouseButtons.cs index 0fba26de9..94e2ac416 100644 --- a/ScreenToGif.Model/Enums/MouseButtons.cs +++ b/ScreenToGif.Model/Enums/MouseButtons.cs @@ -5,5 +5,7 @@ public enum MouseButtons None, Left, Middle, - Right + Right, + FirstExtra, + SecondExtra, } \ No newline at end of file diff --git a/ScreenToGif.Model/ScreenToGif.Domain.csproj b/ScreenToGif.Model/ScreenToGif.Domain.csproj index 3590df279..9ab0b2d5a 100644 --- a/ScreenToGif.Model/ScreenToGif.Domain.csproj +++ b/ScreenToGif.Model/ScreenToGif.Domain.csproj @@ -6,7 +6,7 @@ embedded True AnyCPU;ARM64;x64;x86 - 2.40.1 + 2.41.0 true diff --git a/ScreenToGif.Native/ScreenToGif.Native.csproj b/ScreenToGif.Native/ScreenToGif.Native.csproj index 426d03a76..9afd860bc 100644 --- a/ScreenToGif.Native/ScreenToGif.Native.csproj +++ b/ScreenToGif.Native/ScreenToGif.Native.csproj @@ -6,7 +6,7 @@ True embedded AnyCPU;ARM64;x64;x86 - 2.40.1 + 2.41.0 10.0.17763.0 diff --git a/ScreenToGif.Util/InterProcessChannel/InstanceSwitcherChannel.cs b/ScreenToGif.Util/InterProcessChannel/InstanceSwitcherChannel.cs index 216596e97..2a8441d81 100644 --- a/ScreenToGif.Util/InterProcessChannel/InstanceSwitcherChannel.cs +++ b/ScreenToGif.Util/InterProcessChannel/InstanceSwitcherChannel.cs @@ -18,8 +18,7 @@ public static class InstanceSwitcherChannel private static PipeServer _server; private static Action _receivedAction; - - + public static void RegisterServer(Action receivedAction) { try diff --git a/ScreenToGif.Util/InterProcessChannel/PipeServer.cs b/ScreenToGif.Util/InterProcessChannel/PipeServer.cs index 2b852c02b..0ff844877 100644 --- a/ScreenToGif.Util/InterProcessChannel/PipeServer.cs +++ b/ScreenToGif.Util/InterProcessChannel/PipeServer.cs @@ -35,16 +35,23 @@ public void Stop() private async void ServerLoop() { - while (true) + while (!_source.IsCancellationRequested) { - await _pipe.WaitForConnectionAsync(_source.Token); + try + { + await _pipe.WaitForConnectionAsync(_source.Token); - var message = await JsonSerializer.DeserializeAsync(_pipe, (JsonSerializerOptions) null, _source.Token); + var message = await JsonSerializer.DeserializeAsync(_pipe, (JsonSerializerOptions)null, _source.Token); - _pipe.Disconnect(); + _pipe.Disconnect(); - if (message != null) - _synchronizationContext.Post(OnMessageReceived, message); + if (message != null) + _synchronizationContext.Post(OnMessageReceived, message); + } + catch (Exception) + { + //Ignore. + } } } diff --git a/ScreenToGif.Util/ScreenToGif.Util.csproj b/ScreenToGif.Util/ScreenToGif.Util.csproj index 73607d4f3..031372f04 100644 --- a/ScreenToGif.Util/ScreenToGif.Util.csproj +++ b/ScreenToGif.Util/ScreenToGif.Util.csproj @@ -5,12 +5,12 @@ True embedded AnyCPU;ARM64;x64;x86 - 2.40.1 + 2.41.0 10.0.17763.0 - + diff --git a/ScreenToGif.Util/Settings/UserSettings.cs b/ScreenToGif.Util/Settings/UserSettings.cs index 945c91d74..919898168 100644 --- a/ScreenToGif.Util/Settings/UserSettings.cs +++ b/ScreenToGif.Util/Settings/UserSettings.cs @@ -759,6 +759,12 @@ public bool CheckForUpdates set => SetValue(value); } + public bool DownloadWithMeteredNetwork + { + get => (bool)GetValue(); + set => SetValue(value); + } + public bool PortableUpdate { get => (bool)GetValue(); @@ -2400,6 +2406,18 @@ public Color MiddleMouseButtonClicksColor set => SetValue(value); } + public Color FirstExtraMouseButtonClicksColor + { + get => (Color)GetValue(); + set => SetValue(value); + } + + public Color SecondExtraMouseButtonClicksColor + { + get => (Color)GetValue(); + set => SetValue(value); + } + public double MouseEventsWidth { get => (double)GetValue(); diff --git a/ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/KGySoftGifPreset.cs b/ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/KGySoftGifPreset.cs index 6fb36e2c3..03972d5b0 100644 --- a/ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/KGySoftGifPreset.cs +++ b/ScreenToGif.ViewModel/ExportPresets/AnimatedImage/Gif/KGySoftGifPreset.cs @@ -31,6 +31,7 @@ public class KGySoftGifPreset : GifPreset private bool _allowDeltaFrames = true; private bool _allowClippedFrames = true; private byte _deltaTolerance; + private bool _linearColorSpace; #endregion @@ -45,36 +46,43 @@ public class KGySoftGifPreset : GifPreset { new KGySoftGifPreset { - TitleKey = "S.Preset.Gif.KGySoft.Balanced.Title", - DescriptionKey = "S.Preset.Gif.KGySoft.Balanced.Description", + TitleKey = "S.Preset.Gif.KGySoft.Default.Title", + DescriptionKey = "S.Preset.Gif.KGySoft.Default.Description", HasAutoSave = true, IsSelected = true, IsDefault = true, IsSelectedForEncoder = true, - CreationDate = new DateTime(2021, 12, 15), - QuantizerId = $"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}", + CreationDate = new DateTime(2024, 1, 25), + QuantizerId = $"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.MedianCut)}", }, + // Leaving here for reference because if someone already has a saved config with it, then it's still relevant. + //new KGySoftGifPreset + //{ + // TitleKey = "S.Preset.Gif.KGySoft.Balanced.Title", + // DescriptionKey = "S.Preset.Gif.KGySoft.Balanced.Description", + // HasAutoSave = true, + // IsDefault = true, + // CreationDate = new DateTime(2021, 12, 15), + // QuantizerId = $"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}", + //}, new KGySoftGifPreset { TitleKey = "S.Preset.Gif.KGySoft.High.Title", DescriptionKey = "S.Preset.Gif.KGySoft.High.Description", HasAutoSave = true, - IsSelected = true, IsDefault = true, - IsSelectedForEncoder = true, CreationDate = new DateTime(2021, 12, 15), QuantizerId = $"{nameof(OptimizedPaletteQuantizer)}.{nameof(OptimizedPaletteQuantizer.Wu)}", DithererId = $"{nameof(ErrorDiffusionDitherer)}.{nameof(ErrorDiffusionDitherer.FloydSteinberg)}", BitLevel = 7, + LinearColorSpace = true }, new KGySoftGifPreset { TitleKey = "S.Preset.Gif.KGySoft.Fast.Title", DescriptionKey = "S.Preset.Gif.KGySoft.Fast.Description", HasAutoSave = true, - IsSelected = true, IsDefault = true, - IsSelectedForEncoder = true, CreationDate = new DateTime(2021, 12, 15), QuantizerId = $"{nameof(PredefinedColorsQuantizer)}.{nameof(PredefinedColorsQuantizer.SystemDefault8BppPalette)}", DithererId = $"{nameof(OrderedDitherer)}.{nameof(OrderedDitherer.Bayer8x8)}", @@ -155,6 +163,15 @@ public byte? BitLevel set => SetProperty(ref _bitLevel, value); } + /// + /// Gets or sets whether the quantizing is processed in the linear color space (as opposed to sRGB). + /// + public bool LinearColorSpace + { + get => _linearColorSpace; + set => SetProperty(ref _linearColorSpace, value); + } + #endregion #region Ditherer Settings diff --git a/ScreenToGif.ViewModel/ScreenToGif.ViewModel.csproj b/ScreenToGif.ViewModel/ScreenToGif.ViewModel.csproj index 815d4994a..bdbb45e36 100644 --- a/ScreenToGif.ViewModel/ScreenToGif.ViewModel.csproj +++ b/ScreenToGif.ViewModel/ScreenToGif.ViewModel.csproj @@ -5,11 +5,11 @@ disable embedded AnyCPU;ARM64;x64;x86 - 2.40.1 + 2.41.0 10.0.17763.0 - + diff --git a/ScreenToGif.ViewModel/Tasks/MouseEventsViewModel.cs b/ScreenToGif.ViewModel/Tasks/MouseEventsViewModel.cs index 349823b89..c98b63a16 100644 --- a/ScreenToGif.ViewModel/Tasks/MouseEventsViewModel.cs +++ b/ScreenToGif.ViewModel/Tasks/MouseEventsViewModel.cs @@ -7,10 +7,12 @@ namespace ScreenToGif.ViewModel.Tasks; public class MouseEventsViewModel : BaseTaskViewModel { + private Color _highlightForegroundColor; private Color _leftButtonForegroundColor; private Color _rightButtonForegroundColor; private Color _middleButtonForegroundColor; - private Color _highlightForegroundColor; + private Color _firstExtraButtonForegroundColor; + private Color _secondExtraButtonForegroundColor; private double _width; private double _height; @@ -43,6 +45,18 @@ public Color MiddleButtonForegroundColor set => SetProperty(ref _middleButtonForegroundColor, value); } + public Color FirstExtraButtonForegroundColor + { + get => _firstExtraButtonForegroundColor; + set => SetProperty(ref _firstExtraButtonForegroundColor, value); + } + + public Color SecondExtraButtonForegroundColor + { + get => _secondExtraButtonForegroundColor; + set => SetProperty(ref _secondExtraButtonForegroundColor, value); + } + public double Width { get => _width; @@ -58,9 +72,11 @@ public double Height public override string ToString() { return $"{LocalizationHelper.Get("S.MouseHighlight.Color")} #{HighlightForegroundColor.A:X2}{HighlightForegroundColor.R:X2}{HighlightForegroundColor.G:X2}{HighlightForegroundColor.B:X2}, " + - $"{LocalizationHelper.Get("S.MouseClicks.Color.Left")} #{LeftButtonForegroundColor.A:X2}{LeftButtonForegroundColor.R:X2}{LeftButtonForegroundColor.G:X2}{LeftButtonForegroundColor.B:X2}, " + - $"{LocalizationHelper.Get("S.MouseClicks.Color.Middle")} #{MiddleButtonForegroundColor.A:X2}{MiddleButtonForegroundColor.R:X2}{MiddleButtonForegroundColor.G:X2}{MiddleButtonForegroundColor.B:X2}, " + + $"{LocalizationHelper.Get("S.MouseClicks.Color.Left")} #{LeftButtonForegroundColor.A:X2}{LeftButtonForegroundColor.R:X2}{LeftButtonForegroundColor.G:X2}{LeftButtonForegroundColor.B:X2}, " + $"{LocalizationHelper.Get("S.MouseClicks.Color.Right")} #{RightButtonForegroundColor.A:X2}{RightButtonForegroundColor.R:X2}{RightButtonForegroundColor.G:X2}{RightButtonForegroundColor.B:X2}, " + + $"{LocalizationHelper.Get("S.MouseClicks.Color.Middle")} #{MiddleButtonForegroundColor.A:X2}{MiddleButtonForegroundColor.R:X2}{MiddleButtonForegroundColor.G:X2}{MiddleButtonForegroundColor.B:X2}, " + + $"{LocalizationHelper.Get("S.MouseClicks.Color.FirstExtra")} #{FirstExtraButtonForegroundColor.A:X2}{FirstExtraButtonForegroundColor.R:X2}{FirstExtraButtonForegroundColor.G:X2}{FirstExtraButtonForegroundColor.B:X2}, " + + $"{LocalizationHelper.Get("S.MouseClicks.Color.SecondExtra")} #{SecondExtraButtonForegroundColor.A:X2}{SecondExtraButtonForegroundColor.R:X2}{SecondExtraButtonForegroundColor.G:X2}{SecondExtraButtonForegroundColor.B:X2}, " + $"{LocalizationHelper.Get("S.FreeDrawing.Width")} {Width}, {LocalizationHelper.Get("S.FreeDrawing.Height")} {Height}"; } @@ -72,6 +88,8 @@ public static MouseEventsViewModel Default() LeftButtonForegroundColor = Color.FromArgb(120, 255, 255, 0), RightButtonForegroundColor = Color.FromArgb(120, 255, 0, 0), MiddleButtonForegroundColor = Color.FromArgb(120, 0, 255, 255), + FirstExtraButtonForegroundColor = Color.FromArgb(120, 255, 0, 128), + SecondExtraButtonForegroundColor = Color.FromArgb(120, 255, 128, 0), Height = 12, Width = 12 }; @@ -83,8 +101,10 @@ public static MouseEventsViewModel FromSettings() { HighlightForegroundColor = UserSettings.All.MouseHighlightColor, LeftButtonForegroundColor = UserSettings.All.LeftMouseButtonClicksColor, - MiddleButtonForegroundColor = UserSettings.All.MiddleMouseButtonClicksColor, RightButtonForegroundColor = UserSettings.All.RightMouseButtonClicksColor, + MiddleButtonForegroundColor = UserSettings.All.MiddleMouseButtonClicksColor, + FirstExtraButtonForegroundColor = UserSettings.All.FirstExtraMouseButtonClicksColor, + SecondExtraButtonForegroundColor = UserSettings.All.SecondExtraMouseButtonClicksColor, Height = UserSettings.All.MouseEventsHeight, Width = UserSettings.All.MouseEventsWidth }; diff --git a/ScreenToGif/Resources/Localization/StringResources.en.xaml b/ScreenToGif/Resources/Localization/StringResources.en.xaml index a19376764..85765ba46 100644 --- a/ScreenToGif/Resources/Localization/StringResources.en.xaml +++ b/ScreenToGif/Resources/Localization/StringResources.en.xaml @@ -261,6 +261,8 @@ (Requires a manual installation by unzipping and replacing the executable) Force the update to run with elevated privileges. Prompt me before the installation starts. + Download updates on metered networks. + (Allows download of updates on metered networks) Interface @@ -795,6 +797,8 @@ Supports saving the animation with a transparent background. High quality • Graphics Better for recordings with a lower quantity of colors. + KGy SOFT • Default + Recommended for screen recording of regular UI. Uses Median Cut quantizer without dithering. KGy SOFT • Balanced Good quality for photo-like images using Wu's quantizer without dithering. KGy SOFT • High quality @@ -1389,6 +1393,8 @@ Left button color: Middle button color: Right button color: + 1st extra button color: + 2nd extra button color: Image @@ -1621,6 +1627,8 @@ Custom bit level. When checked, the bit level can be configured manually. ⚠️ Warning: The highest bit level might require a LOT of memory! Higher value means more accuracy, larger target color space, slower processing and larger memory usage. For example, if 1, then the result can have no more than 8 colors, or when 2, no more than 64 colors. For Octree and Wu quantizers it affects also maximum number of monochromatic shades. For example, if 5 (which is the default for Wu quantizer), only 32 monochromatic shades can be differentiated. ⚠️ Caution: The Wu quantizer consumes at least 650 MB with the highest value. + Linear color space + When checked, some operations (alpha blending with background color, quantizing, dithering, looking up the nearest colors in the palette) are performed in the linear color space rather than the sRGB one. Working in the linear color space is slower but provides a better quality result, especially when the quantizer uses only a few colors. ⚠️ Remark: When using just a few colors, the brightness of a possibly resized preview may be incorrect because WPF performs resizing in the sRGB color space. Black and White Fixed 1 bpp palette with the black and white colors. Grayscale 4 colors @@ -1700,7 +1708,7 @@ Repeat Count: Specifies how many times the animation will be played. Allow delta frames. - When checked, unchanged pixels are attempted to be detected during the encoding. When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors. This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked. + When checked, unchanged pixels are attempted to be detected during the encoding. When using with an optimized quantizer, this option makes possible for a frame to have more than 256 colors. This option is ignored if the quantizer does not use transparency and Allow Clipped Frames is unchecked. ⚠️ Remark: This option may cause noticeable artifacts in colors or in the dithering pattern. Delta Tolerance: Specifies the maximum tolerance when detecting changed pixels. If 0, then no difference is tolerated at all. If 255, then there might be frames (or even all of them) that are added with no content. Reasonable range is between 0 and 16 for an optimized quantizer. The ones with fixed colors can be used with somewhat larger values with dithering. If Delta Tolerance is too high the result might have poor quality. Click to reset delta tolerance. diff --git a/ScreenToGif/Resources/Localization/StringResources.hu.xaml b/ScreenToGif/Resources/Localization/StringResources.hu.xaml index fa5913a01..274474599 100644 --- a/ScreenToGif/Resources/Localization/StringResources.hu.xaml +++ b/ScreenToGif/Resources/Localization/StringResources.hu.xaml @@ -794,6 +794,8 @@ Támogatja az animáció mentését átlátszó háttérrel. Kiváló minőség • Grafika Jobb a kisebb színmennyiségű felvételekhez. + KGy SOFT • Alapértelmezett + Szokványos felhasználói felület felvételéhez ajánlott. Medián vágás kvantálót használ árnyalás nélkül. KGy SOFT • Kiegyensúlyozott Jó minőség fénykép jellegű képekhez Wu kvantáló használatával árnyalás nélkül. KGy SOFT • Magas minőség @@ -1618,8 +1620,10 @@ Palettaméret: Meghatározza a képkockánkénti maximális palettaméretet. Egyedi bitmélység - Ha ki van jelölve, a színtér bitmélysége szabadon állítható ⚠️ Vigyázat: A legmagasabb érték NAGYON sok memóriát igényelhet! + Ha ki van jelölve, a bitmélység szabadon állítható ⚠️ Vigyázat: A legmagasabb érték NAGYON sok memóriát igényelhet! A magasabb érték nagyobb pontosságot, nagyobb színteret, lassabb feldolgozást és nagyobb memóriahasználatot jelent. Pl. ha 1, akkor az eredmény legfeljebb 8 színű lehet, vagy 2 esetén legfeljebb 64 színű. Oktális fa és Wu kvantálók esetén meghatározza a maximálisan megkülönböztethető monokróm árnyalatok színét is. Pl. ha 5 (az alapérték Wu kvantáló esetén), akkor legfeljebb 32 monokróm árnyalat különböztethető meg. ⚠️ Vigyázat: A Wu kvantáló legalább 650 MB memóriát igényel a legmagasabb érték esetén. + Lineáris színtér + Ha ki van jelölve, egyes műveletek (háttérszínnel való összemosás, kvantálás, árnyalás, legközelebbi szín keresése a palettában) a lineáris szintérben történnek az sRGB színtér helyett. A lineáris színtérben való feldolgozás lassabb, de jobb minőségű eredményt biztosít, különösen, ha a kvantáló kevés színt használ. ⚠️ Megjegyzés: Kevés szín használata esetén az esetleg átméretezett előnézet fényessége hibás lehet, mert a WPF az átméretezést az sRGB színtérben végzi. Fekete-fehér Fix 1 bites paletta fekete és fehér színekkel. Szürkeárnyalatos 4 színű @@ -1699,7 +1703,7 @@ Ismétlések száma: Meghatározza, hányszor legyen az animáció lejátszva. Delta képkockák engedélyezése - Ha ki van jelölve, a kódolás során kísérlet történik a változatlan pixelek detektálására. Optimalizált kvantáló esetén ez lehetővé teszi, hogy egy képkocka több mint 256 színt tartalmazzon. Ez a beállítás nincs figyelembe véve, ha a kvantáló nem használ átlátszóságot és nincs kijelölve a Levágott képkockák engedélyezése. + Ha ki van jelölve, a kódolás során kísérlet történik a változatlan pixelek detektálására. Optimalizált kvantáló esetén ez lehetővé teszi, hogy egy képkocka több mint 256 színt tartalmazzon. Ez a beállítás nincs figyelembe véve, ha a kvantáló nem használ átlátszóságot és nincs kijelölve a Levágott képkockák engedélyezése. ⚠️ Megjegyzés: Ez a beállítás szemmel látható zajt okozhat a színekben vagy az árnyalási mintázatokban. Delta tűréshatár: Meghatározza a maximális tűréshatárt a változott pixelek detektálása során. Ha 0, akkor semmilyen különbség nincs tolerálva. Ha 255, akkor lehetséges, hogy egyes képkockák (vagy akár az összes) üres lesz. Optimalizált kvantáló esetén az észszerű tartomány 0 és 16 között van, míg a fix színeket alkalmazók használhatók valamivel nagyobb értékekkel, különösen árnyalás esetén. A túl magas delta tűréshatár gyenge minőségű eredménnyel járhat. A linkre kattintással visszaállítható a delta tűréshatár. diff --git a/ScreenToGif/Resources/Localization/StringResources.pt.xaml b/ScreenToGif/Resources/Localization/StringResources.pt.xaml index 1f0c319cb..f55c9417e 100644 --- a/ScreenToGif/Resources/Localization/StringResources.pt.xaml +++ b/ScreenToGif/Resources/Localization/StringResources.pt.xaml @@ -261,6 +261,8 @@ (Requirer a instalação manual, descompactando e trocando o executável) Force a atualização para executar com privilégios de administrador. Avisar-me antes do início da instalação. + Baixe atualizações em redes limitadas. + (Permite baixar atualizações em redes com download limitado) Interface @@ -795,6 +797,8 @@ Suporta salvar a animação com um fundo transparente. Alta qualidade • Gráficos Melhor para gravações com menor quantidade de cores. + KGy SOFT • Padrão + Recomendado para gravações de tela normais. Usa quantizador Median Cut sem pontilhamento. KGy SOFT • Balanceado Boa qualidade para imagens semelhantes a fotos usando o quantizador de Wu sem pontilhamento. KGy SOFT • Alta qualidade @@ -1388,6 +1392,8 @@ Cor do botão esquerdo: Cor do botão do meio: Cor do botão direito: + Cor do 1º botão extra: + Cor do 2º botão extra: Não há cliques de mouse detectados no seu projeto. @@ -1606,7 +1612,7 @@ Pontilhado: Escala Bayer: - + Quantizador Cor de Fundo: Pixels com alfa (transparência) que são considerados opacos pelo quantizador selecionado serão misturados com esta cor antes de obter a cor quantizada. @@ -1621,6 +1627,8 @@ Nível de bits personalizado. Quando marcado, o nível de bits pode ser configurado manualmente. ⚠️ Aviso: O nível de bit mais alto pode exigir MUITA memória! Um valor mais alto significa mais precisão, maior espaço de cores de destino, processamento mais lento e maior uso de memória. Por exemplo, se 1, então o resultado não pode ter mais de 8 cores, ou quando 2, não mais de 64 cores. Para os quantizadores Octree e Wu, afeta também o número máximo de tons monocromáticos. Por exemplo, se 5 (que é o padrão para o quantizador Wu), apenas 32 tons monocromáticos podem ser diferenciados. ⚠️ Cuidado: O quantizador Wu consome pelo menos 650 MB com o valor mais alto. + Espaço de cor linear + Quando marcado, algumas operações (mistura de alfa com plano de fundo, quantização, pontilhamento, procurar cores próximas na palete) são feitas no espaço de cor linear ao invés de no sRGB. Trabalhar no espaço de cores linear é mais lento, mas proporciona um resultado de melhor qualidade, especialmente quando o quantizador usa apenas algumas cores. ⚠️ Observação: Ao usar apenas algumas cores, o brilho de uma visualização possivelmente redimensionada pode estar incorreto porque o WPF realiza o redimensionamento no espaço de cores sRGB. Preto e Branco Paleta fixa de 1 bpp com as cores preto e branco. Tons de cinza com 4 cores @@ -1700,7 +1708,7 @@ Repetições: Especifica quantas vezes a animação será reproduzida. Permitir quadros delta. - Quando marcado, os pixels inalterados tentam ser detectados durante a codificação. Ao usar com um quantizador otimizado, esta opção possibilita que um quadro tenha mais de 256 cores. Esta opção é ignorada se o quantizador não usar transparência e a opção Permitir Quadros Recortados estiver desmarcada. + Quando marcado, os pixels inalterados tentam ser detectados durante a codificação. Ao usar com um quantizador otimizado, esta opção possibilita que um quadro tenha mais de 256 cores. Esta opção é ignorada se o quantizador não usar transparência e a opção Permitir Quadros Recortados estiver desmarcada. ⚠️ Observação: Esta opção pode causar artefatos visíveis nas cores ou no padrão de pontilhamento. Tolerância Delta: Especifica a tolerância máxima ao detectar pixels alterados. Se 0, então nenhuma diferença é tolerada. Se 255, então pode haver quadros (ou mesmo todos eles) que são adicionados sem conteúdo. O intervalo razoável está entre 0 e 16 para um quantizador otimizado. Aqueles com cores fixas podem ser usados com valores um pouco maiores com dithering. Se a tolerância Delta for muito alta, o resultado pode ter baixa qualidade. Clique para redefinir a tolerância delta. diff --git a/ScreenToGif/Resources/Localization/StringResources.zh.xaml b/ScreenToGif/Resources/Localization/StringResources.zh.xaml index 4b3f36b07..01d3a568d 100644 --- a/ScreenToGif/Resources/Localization/StringResources.zh.xaml +++ b/ScreenToGif/Resources/Localization/StringResources.zh.xaml @@ -261,6 +261,8 @@ (需要通过解压缩和替换可执行文件来进行手动安装) 强制更新时提升特权 在安装开始之前提示我 + 使用按流量计费的连接下载更新 + (在系统设置中设置您的连接类型) 界面 diff --git a/ScreenToGif/Resources/Settings.xaml b/ScreenToGif/Resources/Settings.xaml index b0e900c70..5cd52b0ca 100644 --- a/ScreenToGif/Resources/Settings.xaml +++ b/ScreenToGif/Resources/Settings.xaml @@ -57,6 +57,7 @@ False True True + True False False True @@ -146,7 +147,7 @@ - + @@ -356,8 +357,10 @@ #00000000 #78FFFF00 - #7800FFFF #78FF0000 + #7800FFFF + #78FF0080 + #78FF8000 12 12 diff --git a/ScreenToGif/ScreenToGif.csproj b/ScreenToGif/ScreenToGif.csproj index f3f978d02..faa9231de 100644 --- a/ScreenToGif/ScreenToGif.csproj +++ b/ScreenToGif/ScreenToGif.csproj @@ -104,8 +104,8 @@ - - + + all @@ -141,7 +141,7 @@ OnBuildSuccess Nicke Manarin Nicke Manarin - 2.40.1 + 2.41.0 Copyright© Nicke Manarin 2023 https://www.screentogif.com Readme.md diff --git a/ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml b/ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml index e9d298395..d25253a3b 100644 --- a/ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml +++ b/ScreenToGif/UserControls/KGySoftGifOptionsPanel.xaml @@ -26,6 +26,7 @@ + @@ -81,6 +82,13 @@ + + + + @@ -180,11 +188,11 @@ - - + + @@ -40,12 +42,18 @@ - - + + + + + + + - - + diff --git a/ScreenToGif/Util/EncodingManager.cs b/ScreenToGif/Util/EncodingManager.cs index aa71689b2..fa5946394 100644 --- a/ScreenToGif/Util/EncodingManager.cs +++ b/ScreenToGif/Util/EncodingManager.cs @@ -1,4 +1,3 @@ -using KGySoft.Drawing; using System; using System.Collections.Generic; using System.Collections.Specialized; @@ -17,6 +16,8 @@ using System.Windows.Media; using System.Windows.Media.Imaging; +using KGySoft.CoreLibraries; +using KGySoft.Drawing; using KGySoft.Drawing.Imaging; using KGySoft.Threading; @@ -46,7 +47,6 @@ using Encoder = ScreenToGif.Windows.Other.Encoder; using LegacyGifEncoder = ScreenToGif.Util.Codification.Gif.LegacyEncoder.GifEncoder; using KGySoftGifEncoder = KGySoft.Drawing.Imaging.GifEncoder; -using ScreenToGif.ViewModel.ExportPresets.AnimatedImage.Bpg; namespace ScreenToGif.Util; @@ -1401,7 +1401,7 @@ private static void EncodeWithFfmpeg(ExportPreset preset, List