(GameRes): added JPEG compression quality setting.

This commit is contained in:
morkt 2018-04-13 19:46:17 +04:00
parent 3bea44ff30
commit 12bff91ba2
11 changed files with 83 additions and 7 deletions

View File

@ -28,6 +28,7 @@ using System.IO;
using System.Text; using System.Text;
using System.ComponentModel.Composition; using System.ComponentModel.Composition;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
using GameRes.Strings;
using GameRes.Utility; using GameRes.Utility;
namespace GameRes namespace GameRes
@ -40,13 +41,18 @@ namespace GameRes
public override uint Signature { get { return 0; } } public override uint Signature { get { return 0; } }
public override bool CanWrite { get { return true; } } public override bool CanWrite { get { return true; } }
public int Quality { get; set; } readonly FixedGaugeSetting Quality = new FixedGaugeSetting (Properties.Settings.Default) {
Name = "JPEGQuality",
Text = garStrings.JPEGQualityText,
Min = 1, Max = 100,
ValuesSet = new[] { 1, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 },
};
public JpegFormat () public JpegFormat ()
{ {
Extensions = new string[] { "jpg", "jpeg" }; Extensions = new string[] { "jpg", "jpeg" };
Signatures = new uint[] { 0xe0ffd8ffu, 0 }; Signatures = new uint[] { 0xe0ffd8ffu, 0 };
Quality = 100; Settings = new[] { Quality };
} }
public override ImageData Read (IBinaryStream file, ImageMetaData info) public override ImageData Read (IBinaryStream file, ImageMetaData info)
@ -61,7 +67,7 @@ namespace GameRes
public override void Write (Stream file, ImageData image) public override void Write (Stream file, ImageData image)
{ {
var encoder = new JpegBitmapEncoder(); var encoder = new JpegBitmapEncoder();
encoder.QualityLevel = Quality; encoder.QualityLevel = Quality.Get<int>();
encoder.Frames.Add (BitmapFrame.Create (image.Bitmap, null, null, null)); encoder.Frames.Add (BitmapFrame.Create (image.Bitmap, null, null, null));
encoder.Save (file); encoder.Save (file);
} }

View File

@ -46,5 +46,17 @@ namespace GameRes.Properties {
this["UpgradeRequired"] = value; this["UpgradeRequired"] = value;
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("100")]
public int JPEGQuality {
get {
return ((int)(this["JPEGQuality"]));
}
set {
this["JPEGQuality"] = value;
}
}
} }
} }

View File

@ -8,5 +8,8 @@
<Setting Name="UpgradeRequired" Type="System.Boolean" Scope="User"> <Setting Name="UpgradeRequired" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value> <Value Profile="(Default)">True</Value>
</Setting> </Setting>
<Setting Name="JPEGQuality" Type="System.Int32" Scope="User">
<Value Profile="(Default)">100</Value>
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -23,6 +23,9 @@
// IN THE SOFTWARE. // IN THE SOFTWARE.
// //
using System.Collections.Generic;
using System.Configuration;
namespace GameRes namespace GameRes
{ {
/// <summary> /// <summary>
@ -86,11 +89,34 @@ namespace GameRes
} }
} }
internal class LocalResourceSetting : ResourceSettingBase public class ApplicationSetting : ResourceSettingBase
{ {
public ApplicationSetting (ApplicationSettingsBase settings)
{
Settings = settings;
}
public ApplicationSettingsBase Settings { get; set; }
public override object Value { public override object Value {
get { return GameRes.Properties.Settings.Default[Name]; } get { return Settings[Name]; }
set { GameRes.Properties.Settings.Default[Name] = value; } set { Settings[Name] = value; }
}
}
internal class LocalResourceSetting : ApplicationSetting
{
public LocalResourceSetting () : base (GameRes.Properties.Settings.Default) { }
}
public class FixedGaugeSetting : ApplicationSetting
{
public int Min { get; set; }
public int Max { get; set; }
public IEnumerable<int> ValuesSet { get; set; }
public FixedGaugeSetting (ApplicationSettingsBase settings) : base (settings)
{
} }
} }
} }

View File

@ -78,6 +78,15 @@ namespace GameRes.Strings {
} }
} }
/// <summary>
/// Looks up a localized string similar to JPEG compression quality.
/// </summary>
public static string JPEGQualityText {
get {
return ResourceManager.GetString("JPEGQualityText", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to File is empty. /// Looks up a localized string similar to File is empty.
/// </summary> /// </summary>

View File

@ -125,6 +125,9 @@
<value>BMP形式の拡張機能を有効にします。</value> <value>BMP形式の拡張機能を有効にします。</value>
<comment>Enable BMP format extensions</comment> <comment>Enable BMP format extensions</comment>
</data> </data>
<data name="JPEGQualityText" xml:space="preserve">
<value>JPEG compression quality</value>
</data>
<data name="MsgFileIsEmpty" xml:space="preserve"> <data name="MsgFileIsEmpty" xml:space="preserve">
<value>ファイルが空です。</value> <value>ファイルが空です。</value>
<comment>File is empty</comment> <comment>File is empty</comment>

View File

@ -125,6 +125,10 @@
<value>Enable BMP format extensions</value> <value>Enable BMP format extensions</value>
<comment>translation pending</comment> <comment>translation pending</comment>
</data> </data>
<data name="JPEGQualityText" xml:space="preserve">
<value>JPEG compression quality</value>
<comment>translation pending</comment>
</data>
<data name="MsgFileIsEmpty" xml:space="preserve"> <data name="MsgFileIsEmpty" xml:space="preserve">
<value>파일이 비어있습니다</value> <value>파일이 비어있습니다</value>
</data> </data>

View File

@ -123,6 +123,9 @@
<data name="BMPExtensionsText" xml:space="preserve"> <data name="BMPExtensionsText" xml:space="preserve">
<value>Enable BMP format extensions</value> <value>Enable BMP format extensions</value>
</data> </data>
<data name="JPEGQualityText" xml:space="preserve">
<value>JPEG compression quality</value>
</data>
<data name="MsgFileIsEmpty" xml:space="preserve"> <data name="MsgFileIsEmpty" xml:space="preserve">
<value>File is empty</value> <value>File is empty</value>
</data> </data>

View File

@ -123,6 +123,9 @@
<data name="BMPExtensionsText" xml:space="preserve"> <data name="BMPExtensionsText" xml:space="preserve">
<value>Включить расширения формата BMP</value> <value>Включить расширения формата BMP</value>
</data> </data>
<data name="JPEGQualityText" xml:space="preserve">
<value>Качество JPEG-компрессии</value>
</data>
<data name="MsgFileIsEmpty" xml:space="preserve"> <data name="MsgFileIsEmpty" xml:space="preserve">
<value>Файл пуст</value> <value>Файл пуст</value>
</data> </data>

View File

@ -123,6 +123,10 @@
<data name="BMPExtensionsText" xml:space="preserve"> <data name="BMPExtensionsText" xml:space="preserve">
<value>启用 BMP 格式扩展</value> <value>启用 BMP 格式扩展</value>
</data> </data>
<data name="JPEGQualityText" xml:space="preserve">
<value>JPEG compression quality</value>
<comment>translation pending</comment>
</data>
<data name="MsgFileIsEmpty" xml:space="preserve"> <data name="MsgFileIsEmpty" xml:space="preserve">
<value>文件为空。</value> <value>文件为空。</value>
</data> </data>
@ -144,4 +148,4 @@
<data name="MsgUnknownFormat" xml:space="preserve"> <data name="MsgUnknownFormat" xml:space="preserve">
<value>无法作为压缩包打开文件。</value> <value>无法作为压缩包打开文件。</value>
</data> </data>
</root> </root>

View File

@ -13,6 +13,9 @@
<setting name="UpgradeRequired" serializeAs="String"> <setting name="UpgradeRequired" serializeAs="String">
<value>True</value> <value>True</value>
</setting> </setting>
<setting name="JPEGQuality" serializeAs="String">
<value>100</value>
</setting>
</GameRes.Properties.Settings> </GameRes.Properties.Settings>
</userSettings> </userSettings>
</configuration> </configuration>