[DEV] add basic png decoder and remove dependency with java.desktop
This commit is contained in:
parent
8b76ac97e9
commit
4304ef8f6c
7
.checkstyle
Normal file
7
.checkstyle
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<fileset-config file-format-version="1.2.0" simple-config="true" sync-formatter="false">
|
||||
<fileset name="all" enabled="true" check-config-name="Ewol" local="false">
|
||||
<file-match-pattern match-pattern="." include-pattern="true"/>
|
||||
</fileset>
|
||||
</fileset-config>
|
34
.classpath
Normal file
34
.classpath
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path="src">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-15">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/5">
|
||||
<attributes>
|
||||
<attribute name="test" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/atriasoft-etk">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/scenarium-logger">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry combineaccessrules="false" kind="src" path="/atriasoft-egami">
|
||||
<attributes>
|
||||
<attribute name="module" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="out/eclipse/classes"/>
|
||||
</classpath>
|
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
/bin/
|
||||
/Operator/
|
||||
/DrawerProperties/
|
||||
*.pdfd
|
||||
*.dbc
|
||||
SchedulerConfig.txt
|
||||
scenicView.properties
|
||||
ScenariumConfig.txt
|
||||
*.class
|
||||
*~
|
||||
*.bck
|
||||
build.number
|
||||
/extern/
|
||||
/out/
|
||||
/.settings/
|
||||
/junit/
|
||||
/target/
|
24
.project
Normal file
24
.project
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>atriasoft-png-decoder</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
<project>atriasoft-png-decoder</project>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>net.sf.eclipsecs.core.CheckstyleBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
66
CheckStyle.xml
Executable file
66
CheckStyle.xml
Executable file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Check Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
|
||||
|
||||
<!--
|
||||
This configuration file was written by the eclipse-cs plugin configuration editor
|
||||
-->
|
||||
<!--
|
||||
Checkstyle-Configuration: Marc Checks
|
||||
Description:
|
||||
Checkstyle configuration that checks the sun coding conventions.
|
||||
-->
|
||||
<module name="Checker">
|
||||
<property name="severity" value="error"/>
|
||||
<property name="fileExtensions" value="java, properties, xml"/>
|
||||
<module name="TreeWalker">
|
||||
<module name="ConstantName"/>
|
||||
<module name="LocalFinalVariableName"/>
|
||||
<module name="LocalVariableName"/>
|
||||
<module name="MemberName"/>
|
||||
<module name="MethodName"/>
|
||||
<module name="PackageName"/>
|
||||
<module name="ParameterName"/>
|
||||
<module name="StaticVariableName"/>
|
||||
<module name="TypeName"/>
|
||||
<module name="AvoidStarImport"/>
|
||||
<module name="IllegalImport"/>
|
||||
<module name="RedundantImport"/>
|
||||
<module name="UnusedImports">
|
||||
<property name="processJavadoc" value="false"/>
|
||||
</module>
|
||||
<module name="ModifierOrder"/>
|
||||
<module name="EmptyStatement"/>
|
||||
<module name="EqualsHashCode"/>
|
||||
<module name="IllegalInstantiation"/>
|
||||
<module name="MissingSwitchDefault"/>
|
||||
<module name="SimplifyBooleanExpression"/>
|
||||
<module name="SimplifyBooleanReturn"/>
|
||||
<module name="HideUtilityClassConstructor"/>
|
||||
<module name="InterfaceIsType"/>
|
||||
<module name="ArrayTypeStyle"/>
|
||||
<module name="TodoComment"/>
|
||||
<module name="UpperEll"/>
|
||||
<module name="AnnotationUseStyle"/>
|
||||
<module name="MissingDeprecated"/>
|
||||
<module name="MissingOverride"/>
|
||||
<module name="PackageAnnotation"/>
|
||||
<module name="SuppressWarnings"/>
|
||||
<module name="AnnotationLocation"/>
|
||||
<module name="ClassTypeParameterName"/>
|
||||
<module name="MethodTypeParameterName"/>
|
||||
<module name="InterfaceTypeParameterName"/>
|
||||
<module name="CatchParameterName"/>
|
||||
<module name="LambdaParameterName"/>
|
||||
<module name="Regexp"/>
|
||||
<module name="RegexpSinglelineJava"/>
|
||||
</module>
|
||||
<module name="BeforeExecutionExclusionFileFilter">
|
||||
<property name="fileNamePattern" value="module\-info\.java$"/>
|
||||
</module>
|
||||
<module name="Translation"/>
|
||||
<module name="Header"/>
|
||||
<module name="RegexpHeader"/>
|
||||
<module name="RegexpMultiline"/>
|
||||
<module name="RegexpOnFilename"/>
|
||||
<module name="RegexpSingleline"/>
|
||||
</module>
|
106
CleanUp.xml
Normal file
106
CleanUp.xml
Normal file
@ -0,0 +1,106 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="2">
|
||||
<profile kind="CleanUpProfile" name="EWOL" version="2">
|
||||
<setting id="cleanup.use_autoboxing" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_ignore_empty" value="false"/>
|
||||
<setting id="cleanup.format_source_code_changes_only" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_semicolons" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.useless_continue" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_type_arguments" value="true"/>
|
||||
<setting id="cleanup.remove_unused_imports" value="true"/>
|
||||
<setting id="cleanup.break_loop" value="false"/>
|
||||
<setting id="cleanup.pull_up_assignment" value="false"/>
|
||||
<setting id="cleanup.stringbuilder" value="false"/>
|
||||
<setting id="cleanup.no_super" value="false"/>
|
||||
<setting id="cleanup.arrays_fill" value="false"/>
|
||||
<setting id="cleanup.use_lambda" value="true"/>
|
||||
<setting id="cleanup.simplify_lambda_expression_and_method_ref" value="false"/>
|
||||
<setting id="cleanup.always_use_blocks" value="true"/>
|
||||
<setting id="cleanup.sort_members_all" value="false"/>
|
||||
<setting id="cleanup.instanceof" value="false"/>
|
||||
<setting id="cleanup.add_missing_annotations" value="true"/>
|
||||
<setting id="cleanup.precompile_regex" value="false"/>
|
||||
<setting id="cleanup.always_use_this_for_non_static_field_access" value="true"/>
|
||||
<setting id="cleanup.boolean_literal" value="false"/>
|
||||
<setting id="cleanup.always_use_parentheses_in_expressions" value="false"/>
|
||||
<setting id="cleanup.sort_members" value="false"/>
|
||||
<setting id="cleanup.remove_unused_local_variables" value="false"/>
|
||||
<setting id="cleanup.add_missing_deprecated_annotations" value="true"/>
|
||||
<setting id="cleanup.no_string_creation" value="false"/>
|
||||
<setting id="cleanup.use_unboxing" value="false"/>
|
||||
<setting id="cleanup.use_blocks_only_for_return_and_throw" value="false"/>
|
||||
<setting id="cleanup.if_condition" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces" value="true"/>
|
||||
<setting id="cleanup.map_cloning" value="false"/>
|
||||
<setting id="cleanup.add_serial_version_id" value="true"/>
|
||||
<setting id="cleanup.try_with_resource" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_method_access_only_if_necessary" value="true"/>
|
||||
<setting id="cleanup.make_local_variable_final" value="false"/>
|
||||
<setting id="cleanup.add_missing_methods" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.add_missing__annotations" value="true"/>
|
||||
<setting id="cleanup.use_blocks" value="true"/>
|
||||
<setting id="cleanup.collection_cloning" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop_if_loop_var_used" value="false"/>
|
||||
<setting id="cleanup.make_variable_declarations_final" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_types" value="true"/>
|
||||
<setting id="cleanup.qualify_static_method_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.organize_imports" value="true"/>
|
||||
<setting id="cleanup.lazy_logical_operator" value="false"/>
|
||||
<setting id="cleanup.bitwise_conditional_expression" value="false"/>
|
||||
<setting id="cleanup.add_all" value="false"/>
|
||||
<setting id="cleanup.use_directly_map_method" value="false"/>
|
||||
<setting id="cleanup.qualify_static_field_accesses_with_declaring_class" value="false"/>
|
||||
<setting id="cleanup.add_generated_serial_version_id" value="false"/>
|
||||
<setting id="cleanup.primitive_serialization" value="false"/>
|
||||
<setting id="cleanup.comparison_statement" value="false"/>
|
||||
<setting id="cleanup.insert_inferred_type_arguments" value="false"/>
|
||||
<setting id="cleanup.make_private_fields_final" value="true"/>
|
||||
<setting id="cleanup.useless_return" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access_only_if_necessary" value="false"/>
|
||||
<setting id="cleanup.remove_trailing_whitespaces_all" value="true"/>
|
||||
<setting id="cleanup.remove_unnecessary_array_creation" value="false"/>
|
||||
<setting id="cleanup.remove_private_ructors" value="true"/>
|
||||
<setting id="cleanup.make_parameters_final" value="false"/>
|
||||
<setting id="cleanup.ternary_operator" value="false"/>
|
||||
<setting id="cleanup.merge_conditional_blocks" value="false"/>
|
||||
<setting id="cleanup.convert_to_enhanced_for_loop" value="false"/>
|
||||
<setting id="cleanup.remove_unused_private_fields" value="true"/>
|
||||
<setting id="cleanup.never_use_blocks" value="false"/>
|
||||
<setting id="cleanup.remove_redundant_modifiers" value="false"/>
|
||||
<setting id="cleanup.redundant_falling_through_block_end" value="false"/>
|
||||
<setting id="cleanup.switch" value="false"/>
|
||||
<setting id="cleanup.number_suffix" value="false"/>
|
||||
<setting id="cleanup.remove_unnecessary_nls_tags" value="true"/>
|
||||
<setting id="cleanup.convert_to_switch_expressions" value="false"/>
|
||||
<setting id="cleanup.use_this_for_non_static_field_access" value="true"/>
|
||||
<setting id="cleanup.add_missing_nls_tags" value="false"/>
|
||||
<setting id="cleanup.qualify_static_member_accesses_through_instances_with_declaring_class" value="true"/>
|
||||
<setting id="cleanup.remove_unnecessary_casts" value="true"/>
|
||||
<setting id="cleanup.objects_equals" value="false"/>
|
||||
<setting id="cleanup.convert_functional_interfaces" value="true"/>
|
||||
<setting id="cleanup.format_source_code" value="true"/>
|
||||
<setting id="cleanup.else_if" value="true"/>
|
||||
<setting id="cleanup.add_default_serial_version_id" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_methods" value="true"/>
|
||||
<setting id="cleanup.make_type_abstract_if_missing_method" value="false"/>
|
||||
<setting id="cleanup.join" value="false"/>
|
||||
<setting id="cleanup.embedded_if" value="false"/>
|
||||
<setting id="cleanup.use_anonymous_class_creation" value="false"/>
|
||||
<setting id="cleanup.add_missing__annotations_interface_methods" value="true"/>
|
||||
<setting id="cleanup.remove_unused_private_members" value="false"/>
|
||||
<setting id="cleanup.strictly_equal_or_different" value="false"/>
|
||||
<setting id="cleanup.never_use_parentheses_in_expressions" value="true"/>
|
||||
<setting id="cleanup.push_down_negation" value="false"/>
|
||||
<setting id="cleanup.evaluate_nullable" value="false"/>
|
||||
<setting id="cleanup.use_parentheses_in_expressions" value="true"/>
|
||||
<setting id="cleanup.hash" value="false"/>
|
||||
<setting id="cleanup.double_negation" value="false"/>
|
||||
<setting id="cleanup.overridden_assignment" value="false"/>
|
||||
<setting id="cleanup.correct_indentation" value="true"/>
|
||||
<setting id="cleanup.use_var" value="false"/>
|
||||
</profile>
|
||||
</profiles>
|
390
Formatter.xml
Normal file
390
Formatter.xml
Normal file
@ -0,0 +1,390 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<profiles version="20">
|
||||
<profile kind="CodeFormatterProfile" name="EWOL" version="20">
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enuthis.declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_ructor_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enuthis.ant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enuthis.ant_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enuthis.ant" value="48"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_frothis.starting_position" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitructorcall_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enuthis.ant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enuthis.ant_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_ructor_call" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_ructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enuthis.ant" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enuthis.ant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_ructor_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_ructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enuthis.ant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enuthis.declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enuthis.declaration_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_ructor" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enuthis.declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enuthis.ant_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enuthis.ants" value="49"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="200"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enuthis.ant" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_ructor" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_ructor_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_ructor_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enuthis.declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_ructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_ructor_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enuthis.declaration" value="33"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_record_ructor_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_ructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_ructor_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="33"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enuthis.ant_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.keep_enuthis.declaration_on_one_line" value="one_line_if_empty"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enuthis.ant" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enuthis.ant" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitructorcall_arguments" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enuthis.ant_header" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_ructor_declaration" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_ructor_declaration_throws" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="0"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="200"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
|
||||
</profile>
|
||||
</profiles>
|
30
LICENSE
Normal file
30
LICENSE
Normal file
@ -0,0 +1,30 @@
|
||||
BSD licence
|
||||
===========
|
||||
|
||||
Copyright (c) 2008-2010, Matthias Mann
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
* Neither the name of Matthias Mann nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
10
src/module-info.java
Normal file
10
src/module-info.java
Normal file
@ -0,0 +1,10 @@
|
||||
/** Basic module interface.
|
||||
*
|
||||
* @author Edouard DUPIN */
|
||||
|
||||
open module org.atriasoft.pngdecoder {
|
||||
exports org.atriasoft.pngdecoder;
|
||||
|
||||
requires transitive org.atriasoft.egami;
|
||||
requires transitive io.scenarium.logger;
|
||||
}
|
896
src/org/atriasoft/pngdecoder/PNGDecoder.java
Normal file
896
src/org/atriasoft/pngdecoder/PNGDecoder.java
Normal file
@ -0,0 +1,896 @@
|
||||
/*
|
||||
* Copyright (c) 2008-2010, Matthias Mann
|
||||
*
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of Matthias Mann nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software
|
||||
* without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
package org.atriasoft.pngdecoder;
|
||||
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Arrays;
|
||||
import java.util.zip.CRC32;
|
||||
import java.util.zip.DataFormatException;
|
||||
import java.util.zip.Inflater;
|
||||
|
||||
/**
|
||||
* A PNGDecoder. The slick PNG decoder is based on this class :)
|
||||
*
|
||||
* @author Matthias Mann
|
||||
*/
|
||||
public class PNGDecoder {
|
||||
|
||||
public enum Format {
|
||||
ABGR(4, true), ALPHA(1, true), BGRA(4, true), LUMINANCE(1, false), LUMINANCE_ALPHA(2, true), RGB(3, false), RGBA(4, true);
|
||||
|
||||
final boolean hasAlpha;
|
||||
final int numComponents;
|
||||
|
||||
private Format(final int numComponents, final boolean hasAlpha) {
|
||||
this.numComponents = numComponents;
|
||||
this.hasAlpha = hasAlpha;
|
||||
}
|
||||
|
||||
public int getNumComponents() {
|
||||
return this.numComponents;
|
||||
}
|
||||
|
||||
public boolean isHasAlpha() {
|
||||
return this.hasAlpha;
|
||||
}
|
||||
}
|
||||
|
||||
private static final byte COLOR_GREYALPHA = 4;
|
||||
|
||||
private static final byte COLOR_GREYSCALE = 0;
|
||||
private static final byte COLOR_INDEXED = 3;
|
||||
private static final byte COLOR_TRUEALPHA = 6;
|
||||
private static final byte COLOR_TRUECOLOR = 2;
|
||||
private static final int IDAT = 0x49444154;
|
||||
|
||||
private static final int IEND = 0x49454E44;
|
||||
private static final int IHDR = 0x49484452;
|
||||
private static final int PLTE = 0x504C5445;
|
||||
private static final byte[] SIGNATURE = { (byte) 137, 80, 78, 71, 13, 10, 26, 10 };
|
||||
private static final int T_RNS = 0x74524E53;
|
||||
|
||||
private static boolean checkSignature(final byte[] buffer) {
|
||||
for (int i = 0; i < PNGDecoder.SIGNATURE.length; i++) {
|
||||
if (buffer[i] != PNGDecoder.SIGNATURE[i]) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
private int bitdepth;
|
||||
private final byte[] buffer;
|
||||
|
||||
private int bytesPerPixel;
|
||||
private int chunkLength;
|
||||
private int chunkRemaining;
|
||||
|
||||
private int chunkType;
|
||||
private int colorType;
|
||||
private final CRC32 crc;
|
||||
private int height;
|
||||
private final InputStream input;
|
||||
private byte[] palette;
|
||||
private byte[] paletteA;
|
||||
private byte[] transPixel;
|
||||
|
||||
private int width;
|
||||
|
||||
public PNGDecoder(final InputStream input) throws IOException {
|
||||
this.input = input;
|
||||
this.crc = new CRC32();
|
||||
this.buffer = new byte[4096];
|
||||
|
||||
readFully(this.buffer, 0, PNGDecoder.SIGNATURE.length);
|
||||
if (!PNGDecoder.checkSignature(this.buffer)) {
|
||||
throw new IOException("Not a valid PNG file");
|
||||
}
|
||||
|
||||
openChunk(PNGDecoder.IHDR);
|
||||
readIHDR();
|
||||
closeChunk();
|
||||
|
||||
searchIDAT:
|
||||
for (;;) {
|
||||
openChunk();
|
||||
switch (this.chunkType) {
|
||||
default:
|
||||
break;
|
||||
case IDAT:
|
||||
break searchIDAT;
|
||||
case PLTE:
|
||||
readPLTE();
|
||||
break;
|
||||
case T_RNS:
|
||||
readtRNS();
|
||||
break;
|
||||
}
|
||||
closeChunk();
|
||||
}
|
||||
|
||||
if (this.colorType == PNGDecoder.COLOR_INDEXED && this.palette == null) {
|
||||
throw new IOException("Missing PLTE chunk");
|
||||
}
|
||||
}
|
||||
|
||||
private void checkChunkLength(final int expected) throws IOException {
|
||||
if (this.chunkLength != expected) {
|
||||
throw new IOException("Chunk has wrong size");
|
||||
}
|
||||
}
|
||||
|
||||
private void closeChunk() throws IOException {
|
||||
if (this.chunkRemaining > 0) {
|
||||
// just skip the rest and the CRC
|
||||
skip(this.chunkRemaining + 4);
|
||||
} else {
|
||||
readFully(this.buffer, 0, 4);
|
||||
int expectedCrc = readInt(this.buffer, 0);
|
||||
int computedCrc = (int) this.crc.getValue();
|
||||
if (computedCrc != expectedCrc) {
|
||||
throw new IOException("Invalid CRC");
|
||||
}
|
||||
}
|
||||
this.chunkRemaining = 0;
|
||||
this.chunkLength = 0;
|
||||
this.chunkType = 0;
|
||||
}
|
||||
|
||||
private void copy(final ByteBuffer buffer, final byte[] curLine) {
|
||||
buffer.put(curLine, 1, curLine.length - 1);
|
||||
}
|
||||
|
||||
private void copyPALtoABGR(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.paletteA != null) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = this.paletteA[idx];
|
||||
buffer.put(a).put(b).put(g).put(r);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
buffer.put(a).put(b).put(g).put(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyPALtoBGRA(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.paletteA != null) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = this.paletteA[idx];
|
||||
buffer.put(b).put(g).put(r).put(a);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
buffer.put(b).put(g).put(r).put(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyPALtoRGBA(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.paletteA != null) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = this.paletteA[idx];
|
||||
buffer.put(r).put(g).put(b).put(a);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 1) {
|
||||
int idx = curLine[i] & 255;
|
||||
byte r = this.palette[idx * 3 + 0];
|
||||
byte g = this.palette[idx * 3 + 1];
|
||||
byte b = this.palette[idx * 3 + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
buffer.put(r).put(g).put(b).put(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBAtoABGR(final ByteBuffer buffer, final byte[] curLine) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 4) {
|
||||
buffer.put(curLine[i + 3]).put(curLine[i + 2]).put(curLine[i + 1]).put(curLine[i]);
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBAtoBGRA(final ByteBuffer buffer, final byte[] curLine) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 4) {
|
||||
buffer.put(curLine[i + 2]).put(curLine[i + 1]).put(curLine[i]).put(curLine[i + 3]);
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBAtoRGB(final ByteBuffer buffer, final byte[] curLine) {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 4) {
|
||||
buffer.put(curLine[i]).put(curLine[i + 1]).put(curLine[i + 2]);
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBtoABGR(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.transPixel != null) {
|
||||
byte tr = this.transPixel[1];
|
||||
byte tg = this.transPixel[3];
|
||||
byte tb = this.transPixel[5];
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
byte r = curLine[i];
|
||||
byte g = curLine[i + 1];
|
||||
byte b = curLine[i + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
if (r == tr && g == tg && b == tb) {
|
||||
a = 0;
|
||||
}
|
||||
buffer.put(a).put(b).put(g).put(r);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
buffer.put((byte) 0xFF).put(curLine[i + 2]).put(curLine[i + 1]).put(curLine[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBtoBGRA(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.transPixel != null) {
|
||||
byte tr = this.transPixel[1];
|
||||
byte tg = this.transPixel[3];
|
||||
byte tb = this.transPixel[5];
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
byte r = curLine[i];
|
||||
byte g = curLine[i + 1];
|
||||
byte b = curLine[i + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
if (r == tr && g == tg && b == tb) {
|
||||
a = 0;
|
||||
}
|
||||
buffer.put(b).put(g).put(r).put(a);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
buffer.put(curLine[i + 2]).put(curLine[i + 1]).put(curLine[i]).put((byte) 0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void copyRGBtoRGBA(final ByteBuffer buffer, final byte[] curLine) {
|
||||
if (this.transPixel != null) {
|
||||
byte tr = this.transPixel[1];
|
||||
byte tg = this.transPixel[3];
|
||||
byte tb = this.transPixel[5];
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
byte r = curLine[i];
|
||||
byte g = curLine[i + 1];
|
||||
byte b = curLine[i + 2];
|
||||
byte a = (byte) 0xFF;
|
||||
if (r == tr && g == tg && b == tb) {
|
||||
a = 0;
|
||||
}
|
||||
buffer.put(r).put(g).put(b).put(a);
|
||||
}
|
||||
} else {
|
||||
for (int i = 1, n = curLine.length; i < n; i += 3) {
|
||||
buffer.put(curLine[i]).put(curLine[i + 1]).put(curLine[i + 2]).put((byte) 0xFF);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Computes the implemented format conversion for the desired format.
|
||||
*
|
||||
* @param fmt the desired format
|
||||
* @return format which best matches the desired format
|
||||
* @throws UnsupportedOperationException if this PNG file can't be decoded
|
||||
*/
|
||||
public Format decideTextureFormat(final Format fmt) {
|
||||
switch (this.colorType) {
|
||||
case COLOR_TRUECOLOR:
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
case RGBA:
|
||||
case BGRA:
|
||||
case RGB:
|
||||
return fmt;
|
||||
default:
|
||||
return Format.RGB;
|
||||
}
|
||||
case COLOR_TRUEALPHA:
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
case RGBA:
|
||||
case BGRA:
|
||||
case RGB:
|
||||
return fmt;
|
||||
default:
|
||||
return Format.RGBA;
|
||||
}
|
||||
case COLOR_GREYSCALE:
|
||||
switch (fmt) {
|
||||
case LUMINANCE:
|
||||
case ALPHA:
|
||||
return fmt;
|
||||
default:
|
||||
return Format.LUMINANCE;
|
||||
}
|
||||
case COLOR_GREYALPHA:
|
||||
return Format.LUMINANCE_ALPHA;
|
||||
case COLOR_INDEXED:
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
case RGBA:
|
||||
case BGRA:
|
||||
return fmt;
|
||||
default:
|
||||
return Format.RGBA;
|
||||
}
|
||||
default:
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes the image into the specified buffer. The first line is placed at
|
||||
* the current position. After decode the buffer position is at the end of
|
||||
* the last line.
|
||||
*
|
||||
* @param buffer the buffer
|
||||
* @param stride the stride in bytes from start of a line to start of the next line, can be negative.
|
||||
* @param fmt the target format into which the image should be decoded.
|
||||
* @throws IOException if a read or data error occurred
|
||||
* @throws IllegalArgumentException if the start position of a line falls outside the buffer
|
||||
* @throws UnsupportedOperationException if the image can't be decoded into the desired format
|
||||
*/
|
||||
public void decode(final ByteBuffer buffer, final int stride, final Format fmt) throws IOException {
|
||||
final int offset = buffer.position();
|
||||
final int lineSize = ((this.width * this.bitdepth + 7) / 8) * this.bytesPerPixel;
|
||||
byte[] curLine = new byte[lineSize + 1];
|
||||
byte[] prevLine = new byte[lineSize + 1];
|
||||
byte[] palLine = (this.bitdepth < 8) ? new byte[this.width + 1] : null;
|
||||
|
||||
final Inflater inflater = new Inflater();
|
||||
try {
|
||||
for (int y = 0; y < this.height; y++) {
|
||||
readChunkUnzip(inflater, curLine, 0, curLine.length);
|
||||
unfilter(curLine, prevLine);
|
||||
|
||||
buffer.position(offset + y * stride);
|
||||
|
||||
switch (this.colorType) {
|
||||
case COLOR_TRUECOLOR:
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
copyRGBtoABGR(buffer, curLine);
|
||||
break;
|
||||
case RGBA:
|
||||
copyRGBtoRGBA(buffer, curLine);
|
||||
break;
|
||||
case BGRA:
|
||||
copyRGBtoBGRA(buffer, curLine);
|
||||
break;
|
||||
case RGB:
|
||||
copy(buffer, curLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported format for this image");
|
||||
}
|
||||
break;
|
||||
case COLOR_TRUEALPHA:
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
copyRGBAtoABGR(buffer, curLine);
|
||||
break;
|
||||
case RGBA:
|
||||
copy(buffer, curLine);
|
||||
break;
|
||||
case BGRA:
|
||||
copyRGBAtoBGRA(buffer, curLine);
|
||||
break;
|
||||
case RGB:
|
||||
copyRGBAtoRGB(buffer, curLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported format for this image");
|
||||
}
|
||||
break;
|
||||
case COLOR_GREYSCALE:
|
||||
switch (fmt) {
|
||||
case LUMINANCE:
|
||||
case ALPHA:
|
||||
copy(buffer, curLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported format for this image");
|
||||
}
|
||||
break;
|
||||
case COLOR_GREYALPHA:
|
||||
switch (fmt) {
|
||||
case LUMINANCE_ALPHA:
|
||||
copy(buffer, curLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported format for this image");
|
||||
}
|
||||
break;
|
||||
case COLOR_INDEXED:
|
||||
switch (this.bitdepth) {
|
||||
case 8:
|
||||
palLine = curLine;
|
||||
break;
|
||||
case 4:
|
||||
expand4(curLine, palLine);
|
||||
break;
|
||||
case 2:
|
||||
expand2(curLine, palLine);
|
||||
break;
|
||||
case 1:
|
||||
expand1(curLine, palLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported bitdepth for this image");
|
||||
}
|
||||
switch (fmt) {
|
||||
case ABGR:
|
||||
copyPALtoABGR(buffer, palLine);
|
||||
break;
|
||||
case RGBA:
|
||||
copyPALtoRGBA(buffer, palLine);
|
||||
break;
|
||||
case BGRA:
|
||||
copyPALtoBGRA(buffer, palLine);
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Unsupported format for this image");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new UnsupportedOperationException("Not yet implemented");
|
||||
}
|
||||
|
||||
byte[] tmp = curLine;
|
||||
curLine = prevLine;
|
||||
prevLine = tmp;
|
||||
}
|
||||
} finally {
|
||||
inflater.end();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Decodes the image into the specified buffer. The last line is placed at
|
||||
* the current position. After decode the buffer position is at the end of
|
||||
* the first line.
|
||||
*
|
||||
* @param buffer the buffer
|
||||
* @param stride the stride in bytes from start of a line to start of the next line, must be positive.
|
||||
* @param fmt the target format into which the image should be decoded.
|
||||
* @throws IOException if a read or data error occurred
|
||||
* @throws IllegalArgumentException if the start position of a line falls outside the buffer
|
||||
* @throws UnsupportedOperationException if the image can't be decoded into the desired format
|
||||
*/
|
||||
public void decodeFlipped(final ByteBuffer buffer, final int stride, final Format fmt) throws IOException {
|
||||
if (stride <= 0) {
|
||||
throw new IllegalArgumentException("stride");
|
||||
}
|
||||
int pos = buffer.position();
|
||||
int posDelta = (this.height - 1) * stride;
|
||||
buffer.position(pos + posDelta);
|
||||
decode(buffer, -stride, fmt);
|
||||
buffer.position(buffer.position() + posDelta);
|
||||
}
|
||||
|
||||
private void expand1(final byte[] src, final byte[] dst) {
|
||||
for (int i = 1, n = dst.length; i < n; i += 8) {
|
||||
int val = src[1 + (i >> 3)] & 255;
|
||||
switch (n - i) {
|
||||
default:
|
||||
dst[i + 7] = (byte) ((val) & 1);
|
||||
case 7:
|
||||
dst[i + 6] = (byte) ((val >> 1) & 1);
|
||||
case 6:
|
||||
dst[i + 5] = (byte) ((val >> 2) & 1);
|
||||
case 5:
|
||||
dst[i + 4] = (byte) ((val >> 3) & 1);
|
||||
case 4:
|
||||
dst[i + 3] = (byte) ((val >> 4) & 1);
|
||||
case 3:
|
||||
dst[i + 2] = (byte) ((val >> 5) & 1);
|
||||
case 2:
|
||||
dst[i + 1] = (byte) ((val >> 6) & 1);
|
||||
case 1:
|
||||
dst[i] = (byte) ((val >> 7));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void expand2(final byte[] src, final byte[] dst) {
|
||||
for (int i = 1, n = dst.length; i < n; i += 4) {
|
||||
int val = src[1 + (i >> 2)] & 255;
|
||||
switch (n - i) {
|
||||
default:
|
||||
dst[i + 3] = (byte) ((val) & 3);
|
||||
case 3:
|
||||
dst[i + 2] = (byte) ((val >> 2) & 3);
|
||||
case 2:
|
||||
dst[i + 1] = (byte) ((val >> 4) & 3);
|
||||
case 1:
|
||||
dst[i] = (byte) ((val >> 6));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void expand4(final byte[] src, final byte[] dst) {
|
||||
for (int i = 1, n = dst.length; i < n; i += 2) {
|
||||
int val = src[1 + (i >> 1)] & 255;
|
||||
switch (n - i) {
|
||||
default:
|
||||
dst[i + 1] = (byte) (val & 15);
|
||||
case 1:
|
||||
dst[i] = (byte) (val >> 4);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return this.height;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return this.width;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the image has transparency information either from
|
||||
* an alpha channel or from a tRNS chunk.
|
||||
*
|
||||
* @return true if the image has transparency
|
||||
* @see #hasAlphaChannel()
|
||||
* @see #overwriteTRNS(byte, byte, byte)
|
||||
*/
|
||||
public boolean hasAlpha() {
|
||||
return hasAlphaChannel() || this.paletteA != null || this.transPixel != null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the image has a real alpha channel.
|
||||
* This method does not check for the presence of a tRNS chunk.
|
||||
*
|
||||
* @return true if the image has an alpha channel
|
||||
* @see #hasAlpha()
|
||||
*/
|
||||
public boolean hasAlphaChannel() {
|
||||
return this.colorType == PNGDecoder.COLOR_TRUEALPHA || this.colorType == PNGDecoder.COLOR_GREYALPHA;
|
||||
}
|
||||
|
||||
public boolean isRGB() {
|
||||
return this.colorType == PNGDecoder.COLOR_TRUEALPHA || this.colorType == PNGDecoder.COLOR_TRUECOLOR || this.colorType == PNGDecoder.COLOR_INDEXED;
|
||||
}
|
||||
|
||||
private void openChunk() throws IOException {
|
||||
readFully(this.buffer, 0, 8);
|
||||
this.chunkLength = readInt(this.buffer, 0);
|
||||
this.chunkType = readInt(this.buffer, 4);
|
||||
this.chunkRemaining = this.chunkLength;
|
||||
this.crc.reset();
|
||||
this.crc.update(this.buffer, 4, 4); // only chunkType
|
||||
}
|
||||
|
||||
private void openChunk(final int expected) throws IOException {
|
||||
openChunk();
|
||||
if (this.chunkType != expected) {
|
||||
throw new IOException("Expected chunk: " + Integer.toHexString(expected));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrites the tRNS chunk entry to make a selected color transparent.
|
||||
* <p>This can only be invoked when the image has no alpha channel.</p>
|
||||
* <p>Calling this method causes {@link #hasAlpha()} to return true.</p>
|
||||
*
|
||||
* @param r the red component of the color to make transparent
|
||||
* @param g the green component of the color to make transparent
|
||||
* @param b the blue component of the color to make transparent
|
||||
* @throws UnsupportedOperationException if the tRNS chunk data can't be set
|
||||
* @see #hasAlphaChannel()
|
||||
*/
|
||||
public void overwriteTRNS(final byte r, final byte g, final byte b) {
|
||||
if (hasAlphaChannel()) {
|
||||
throw new UnsupportedOperationException("image has an alpha channel");
|
||||
}
|
||||
byte[] pal = this.palette;
|
||||
if (pal == null) {
|
||||
this.transPixel = new byte[] { 0, r, 0, g, 0, b };
|
||||
} else {
|
||||
this.paletteA = new byte[pal.length / 3];
|
||||
for (int i = 0, j = 0; i < pal.length; i += 3, j++) {
|
||||
if (pal[i] != r || pal[i + 1] != g || pal[i + 2] != b) {
|
||||
this.paletteA[j] = (byte) 0xFF;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int readChunk(final byte[] buffer, final int offset, int length) throws IOException {
|
||||
if (length > this.chunkRemaining) {
|
||||
length = this.chunkRemaining;
|
||||
}
|
||||
readFully(buffer, offset, length);
|
||||
this.crc.update(buffer, offset, length);
|
||||
this.chunkRemaining -= length;
|
||||
return length;
|
||||
}
|
||||
|
||||
private void readChunkUnzip(final Inflater inflater, final byte[] buffer, int offset, int length) throws IOException {
|
||||
assert (buffer != this.buffer);
|
||||
try {
|
||||
do {
|
||||
int read = inflater.inflate(buffer, offset, length);
|
||||
if (read <= 0) {
|
||||
if (inflater.finished()) {
|
||||
throw new EOFException();
|
||||
}
|
||||
if (!inflater.needsInput()) {
|
||||
throw new IOException("Can't inflate " + length + " bytes");
|
||||
}
|
||||
refillInflater(inflater);
|
||||
} else {
|
||||
offset += read;
|
||||
length -= read;
|
||||
}
|
||||
} while (length > 0);
|
||||
} catch (DataFormatException ex) {
|
||||
throw (IOException) (new IOException("inflate error").initCause(ex));
|
||||
}
|
||||
}
|
||||
|
||||
private void readFully(final byte[] buffer, int offset, int length) throws IOException {
|
||||
do {
|
||||
int read = this.input.read(buffer, offset, length);
|
||||
if (read < 0) {
|
||||
throw new EOFException();
|
||||
}
|
||||
offset += read;
|
||||
length -= read;
|
||||
} while (length > 0);
|
||||
}
|
||||
|
||||
private void readIHDR() throws IOException {
|
||||
checkChunkLength(13);
|
||||
readChunk(this.buffer, 0, 13);
|
||||
this.width = readInt(this.buffer, 0);
|
||||
this.height = readInt(this.buffer, 4);
|
||||
this.bitdepth = this.buffer[8] & 255;
|
||||
this.colorType = this.buffer[9] & 255;
|
||||
|
||||
switch (this.colorType) {
|
||||
case COLOR_GREYSCALE:
|
||||
if (this.bitdepth != 8) {
|
||||
throw new IOException("Unsupported bit depth: " + this.bitdepth);
|
||||
}
|
||||
this.bytesPerPixel = 1;
|
||||
break;
|
||||
case COLOR_GREYALPHA:
|
||||
if (this.bitdepth != 8) {
|
||||
throw new IOException("Unsupported bit depth: " + this.bitdepth);
|
||||
}
|
||||
this.bytesPerPixel = 2;
|
||||
break;
|
||||
case COLOR_TRUECOLOR:
|
||||
if (this.bitdepth != 8) {
|
||||
throw new IOException("Unsupported bit depth: " + this.bitdepth);
|
||||
}
|
||||
this.bytesPerPixel = 3;
|
||||
break;
|
||||
case COLOR_TRUEALPHA:
|
||||
if (this.bitdepth != 8) {
|
||||
throw new IOException("Unsupported bit depth: " + this.bitdepth);
|
||||
}
|
||||
this.bytesPerPixel = 4;
|
||||
break;
|
||||
case COLOR_INDEXED:
|
||||
switch (this.bitdepth) {
|
||||
case 8:
|
||||
case 4:
|
||||
case 2:
|
||||
case 1:
|
||||
this.bytesPerPixel = 1;
|
||||
break;
|
||||
default:
|
||||
throw new IOException("Unsupported bit depth: " + this.bitdepth);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw new IOException("unsupported color format: " + this.colorType);
|
||||
}
|
||||
|
||||
if (this.buffer[10] != 0) {
|
||||
throw new IOException("unsupported compression method");
|
||||
}
|
||||
if (this.buffer[11] != 0) {
|
||||
throw new IOException("unsupported filtering method");
|
||||
}
|
||||
if (this.buffer[12] != 0) {
|
||||
throw new IOException("unsupported interlace method");
|
||||
}
|
||||
}
|
||||
|
||||
private int readInt(final byte[] buffer, final int offset) {
|
||||
return ((buffer[offset]) << 24) | ((buffer[offset + 1] & 255) << 16) | ((buffer[offset + 2] & 255) << 8) | ((buffer[offset + 3] & 255));
|
||||
}
|
||||
|
||||
private void readPLTE() throws IOException {
|
||||
int paletteEntries = this.chunkLength / 3;
|
||||
if (paletteEntries < 1 || paletteEntries > 256 || (this.chunkLength % 3) != 0) {
|
||||
throw new IOException("PLTE chunk has wrong length");
|
||||
}
|
||||
this.palette = new byte[paletteEntries * 3];
|
||||
readChunk(this.palette, 0, this.palette.length);
|
||||
}
|
||||
|
||||
private void readtRNS() throws IOException {
|
||||
switch (this.colorType) {
|
||||
case COLOR_GREYSCALE:
|
||||
checkChunkLength(2);
|
||||
this.transPixel = new byte[2];
|
||||
readChunk(this.transPixel, 0, 2);
|
||||
break;
|
||||
case COLOR_TRUECOLOR:
|
||||
checkChunkLength(6);
|
||||
this.transPixel = new byte[6];
|
||||
readChunk(this.transPixel, 0, 6);
|
||||
break;
|
||||
case COLOR_INDEXED:
|
||||
if (this.palette == null) {
|
||||
throw new IOException("tRNS chunk without PLTE chunk");
|
||||
}
|
||||
this.paletteA = new byte[this.palette.length / 3];
|
||||
Arrays.fill(this.paletteA, (byte) 0xFF);
|
||||
readChunk(this.paletteA, 0, this.paletteA.length);
|
||||
break;
|
||||
default:
|
||||
// just ignore it
|
||||
}
|
||||
}
|
||||
|
||||
private void refillInflater(final Inflater inflater) throws IOException {
|
||||
while (this.chunkRemaining == 0) {
|
||||
closeChunk();
|
||||
openChunk(PNGDecoder.IDAT);
|
||||
}
|
||||
int read = readChunk(this.buffer, 0, this.buffer.length);
|
||||
inflater.setInput(this.buffer, 0, read);
|
||||
}
|
||||
|
||||
private void skip(long amount) throws IOException {
|
||||
while (amount > 0) {
|
||||
long skipped = this.input.skip(amount);
|
||||
if (skipped < 0) {
|
||||
throw new EOFException();
|
||||
}
|
||||
amount -= skipped;
|
||||
}
|
||||
}
|
||||
|
||||
private void unfilter(final byte[] curLine, final byte[] prevLine) throws IOException {
|
||||
switch (curLine[0]) {
|
||||
case 0: // none
|
||||
break;
|
||||
case 1:
|
||||
unfilterSub(curLine);
|
||||
break;
|
||||
case 2:
|
||||
unfilterUp(curLine, prevLine);
|
||||
break;
|
||||
case 3:
|
||||
unfilterAverage(curLine, prevLine);
|
||||
break;
|
||||
case 4:
|
||||
unfilterPaeth(curLine, prevLine);
|
||||
break;
|
||||
default:
|
||||
throw new IOException("invalide filter type in scanline: " + curLine[0]);
|
||||
}
|
||||
}
|
||||
|
||||
private void unfilterAverage(final byte[] curLine, final byte[] prevLine) {
|
||||
final int bpp = this.bytesPerPixel;
|
||||
|
||||
int i;
|
||||
for (i = 1; i <= bpp; ++i) {
|
||||
curLine[i] += (byte) ((prevLine[i] & 0xFF) >>> 1);
|
||||
}
|
||||
for (int n = curLine.length; i < n; ++i) {
|
||||
curLine[i] += (byte) (((prevLine[i] & 0xFF) + (curLine[i - bpp] & 0xFF)) >>> 1);
|
||||
}
|
||||
}
|
||||
|
||||
private void unfilterPaeth(final byte[] curLine, final byte[] prevLine) {
|
||||
final int bpp = this.bytesPerPixel;
|
||||
|
||||
int i;
|
||||
for (i = 1; i <= bpp; ++i) {
|
||||
curLine[i] += prevLine[i];
|
||||
}
|
||||
for (int n = curLine.length; i < n; ++i) {
|
||||
int a = curLine[i - bpp] & 255;
|
||||
int b = prevLine[i] & 255;
|
||||
int c = prevLine[i - bpp] & 255;
|
||||
int p = a + b - c;
|
||||
int pa = p - a;
|
||||
if (pa < 0) {
|
||||
pa = -pa;
|
||||
}
|
||||
int pb = p - b;
|
||||
if (pb < 0) {
|
||||
pb = -pb;
|
||||
}
|
||||
int pc = p - c;
|
||||
if (pc < 0) {
|
||||
pc = -pc;
|
||||
}
|
||||
if (pa <= pb && pa <= pc) {
|
||||
c = a;
|
||||
} else if (pb <= pc) {
|
||||
c = b;
|
||||
}
|
||||
curLine[i] += (byte) c;
|
||||
}
|
||||
}
|
||||
|
||||
private void unfilterSub(final byte[] curLine) {
|
||||
final int bpp = this.bytesPerPixel;
|
||||
for (int i = bpp + 1, n = curLine.length; i < n; ++i) {
|
||||
curLine[i] += curLine[i - bpp];
|
||||
}
|
||||
}
|
||||
|
||||
private void unfilterUp(final byte[] curLine, final byte[] prevLine) {
|
||||
final int bpp = this.bytesPerPixel;
|
||||
for (int i = 1, n = curLine.length; i < n; ++i) {
|
||||
curLine[i] += prevLine[i];
|
||||
}
|
||||
}
|
||||
}
|
1
version.txt
Normal file
1
version.txt
Normal file
@ -0,0 +1 @@
|
||||
0.1.0
|
Loading…
Reference in New Issue
Block a user