Jacek Kucharczyk c582323a8f
JBIG2 Generic Encoder (#264)
* Prepared skeleton and basic component implementations for the jbig2 encoding.

* Added Bitset. Implemented Bitmap.

* Decoder with old Arithmetic Decoder

* Partly working arithmetic

* Working arithmetic decoder.

* MMR patched.

* rebuild to apache.

* Working generic

* Working generic

* Decoded full document

* Update Jenkinsfile go version [master] (#398)

* Update Jenkinsfile go version

* Decoded AnnexH document

* Minor issues fixed.

* Update README.md

* Fixed generic region errors. Added benchmark. Added bitmap unpadder. Added Bitmap toImage method.

* Fixed endofpage error

* Added integration test.

* Decoded all test files without errors. Implemented JBIG2Global.

* Merged with v3 version

* Fixed the EOF in the globals issue

* Fixed the JBIG2 ChocolateData Decode

* JBIG2 Added license information

* Minor fix in jbig2 encoding.

* Applied the logging convention

* Cleaned unnecessary imports

* Go modules clear unused imports

* checked out the README.md

* Moved trace to Debug. Fixed the build integrate tag in the document_decode_test.go

* Initial encoder skeleton

* Applied UniPDF Developer Guide. Fixed lint issues.

* Cleared documentation, fixed style issues.

* Added jbig2 doc.go files. Applied unipdf guide style.

* Minor code style changes.

* Minor naming and style issues fixes.

* Minor naming changes. Style issues fixed.

* Review r11 fixes.

* Added JBIG2 Encoder skeleton.

* Moved Document and Page to jbig2/document package. Created decoder package responsible for decoding jbig2 stream.

* Implemented raster functions.

* Added raster uni low test funcitons.

* Added raster low test functions

* untracked files on jbig2-encoder: c869089 Added raster low test functions

* index on jbig2-encoder: c869089 Added raster low test functions

* Added morph files.

* implemented jbig2 encoder basics

* JBIG2 Encoder - Generic method

* Added jbig2 image encode ttests, black/white image tests

* cleaned and tested jbig2 package

* unfinished jbig2 classified encoder

* jbig2 minor style changes

* minor jbig2 encoder changes

* prepared JBIG2 Encoder

* Style and lint fixes

* Minor changes and lints

* Fixed shift unsinged value build errors

* Minor naming change

* Added jbig2 encode, image gondels. Fixed jbig2 decode bug.

* Provided jbig2 core.DecodeGlobals function.

* Fixed JBIG2Encoder `r6` revision issues.

* Removed public JBIG2Encoder document.

* Minor style changes

* added NewJBIG2Encoder function.

* fixed JBIG2Encoder 'r9' revision issues.

* Cleared 'r9' commented code.

* Updated ACKNOWLEDGEMENETS. Fixed JBIG2Encoder 'r10' revision issues.

Co-authored-by: Gunnsteinn Hall <gunnsteinn.hall@gmail.com>
2020-03-27 11:47:41 +00:00

98 lines
2.4 KiB
Go

/*
* This file is subject to the terms and conditions defined in
* file 'LICENSE.md', which is part of this source code package.
*/
package basic
import (
"github.com/unidoc/unipdf/v3/internal/jbig2/errors"
)
// IntSlice is the integer slice that contains panic safe methods.
type IntSlice []int
// NewIntSlice creates new integer slice.
func NewIntSlice(i int) *IntSlice {
sl := IntSlice(make([]int, i))
return &sl
}
// Add adds the integer 'v' to the slice
func (i *IntSlice) Add(v int) error {
if i == nil {
return errors.Error("IntSlice.Add", "slice not defined")
}
*i = append(*i, v)
return nil
}
// Copy creates a copy of given int slice.
func (i *IntSlice) Copy() *IntSlice {
cp := IntSlice(make([]int, len(*i)))
copy(cp, *i)
return &cp
}
// Get gets the integer at 'index'.
// Returns error if the index is out of range or given integer doesn't exists.
func (i IntSlice) Get(index int) (int, error) {
if index > len(i)-1 {
return 0, errors.Errorf("IntSlice.Get", "index: %d out of range", index)
}
return i[index], nil
}
// Size returns the size of the int slice.
func (i IntSlice) Size() int {
return len(i)
}
// NewNumSlice creates a new NumSlice pointer.
func NewNumSlice(i int) *NumSlice {
arr := NumSlice(make([]float32, i))
return &arr
}
// NumSlice is the slice of the numbers that has a panic safe API.
type NumSlice []float32
// Add adds the float32 'v' value.
func (n *NumSlice) Add(v float32) {
*n = append(*n, v)
}
// AddInt adds the 'v' integer value to the num slice.
func (n *NumSlice) AddInt(v int) {
*n = append(*n, float32(v))
}
// Get the float32 value at 'i' index. Returns error if the index 'i' is out of range.
func (n NumSlice) Get(i int) (float32, error) {
if i < 0 || i > len(n)-1 {
return 0, errors.Errorf("NumSlice.Get", "index: '%d' out of range", i)
}
return n[i], nil
}
// GetInt gets the integer value at the 'i' position.
// The functions return errors if the index 'i' is out of range.
// Returns '0' on error.
func (n NumSlice) GetInt(i int) (int, error) {
const processName = "GetInt"
if i < 0 || i > len(n)-1 {
return 0, errors.Errorf(processName, "index: '%d' out of range", i)
}
v := n[i]
return int(v + Sign(v)*0.5), nil
}
// GetIntSlice gets the slice of integers from the provided 'NumSlice' values.
func (n NumSlice) GetIntSlice() []int {
sl := make([]int, len(n))
for i, v := range n {
sl[i] = int(v)
}
return sl
}