Comments (1)
Sorry I didn't have time during my previous post to type up more detailed feedback.
I think the library can be significantly simplified.
There is too much overloading of classes with unnecessary class overloads and interfaces.
Overloaded classes is good, but there's too much of everything. Eg. all the CIccCurve overloads
including CIccTagParametricCurve, CIccTagCurve ...etc can all just be munged into one bigger
CIccCurve function for code simplicity.
There is very little explanation of the spec itself; this would be invaluable in a reference
implementation of a standard file format, which is the stated purpose of this repository. Most
of the docs are just "process comments" such as "Purpose: The parametric curve type tag".
It would be most helpful to explain more useful format related things such as what this curve can
contain, what do the coefficients mean...etc. I got that from reading the code for a while, but I
feel the style of code documentation fights against me doing that
Code logic is split everywhere and needlessly convoluted. There is a lot of case-bash code: if
this or this but not this then this else that then this or this or that. I think better design
can mitigate the need for this significantly. The xform application stack code in Cmm is very
convoluted with Apply factory copies, it's very own iterator for some reason. This can be
simplified to a flat xforms[] array then xforms[n++] = MyXForm, then Cmm_Apply( xform, n ), and
the entire IccCmm class deleted.
Exposure of internal members is very inconsistent. It is of help for my usecase for a library
that can load ICC into a bunch of data structures and help me understand it and access the data.
The loading of data structures is very good here and runs fast. The accessing bit is sort of
wierd. For instance, I had to make a a hack class class MyCIccXformMatrix : public
CIccXformMatrixTRC in order to access the protected matrix. Why isn't there a GetMatrix that's
public here?
There is case-bash logic everywhere, with little clarification or justification. If dest space is
this, and there's this other tag, why do I have to set this pointer to some random other tag?
Please point to the ICC file format spec that raises the need for this?
Hope this helps, and thanks for the library!
Originally posted by @hypernewbie in #12 (comment) #issuecomment-386181591
from demoiccmax.
Related Issues (20)
- Excessive memory consumption and bad performance for Google SKIA profiles/fuzz/curv_size_overflow.icc HOT 1
- Compilation breakage - typo in local variable name HOT 1
- problem with compiling
- Heap validation failure (MSVC Windows x64 Debug build) with fuzzing ICC HOT 2
- problem with compiling and linking using macOS HOT 1
- CLI tools do not report underlying IccProfLib version HOT 1
- Create ICC Profile by scanning a color chart HOT 1
- version-independent interpretation of bytes 84..99
- Minor alignment issue for B Curve parsing in CIccTagLutAtoB::Read
- Lut16 / Lut8 Handling of PCSXYZ Color Space doesn't set up curves/matrix
- Color management result by CMM may be "-nan(ind)"
- Inconsistent validation results (missing validation checks)
- Bugs from Fuzzing
- AddressSanitizer: heap-buffer-overflow on IccTagXml HOT 2
- Custom Names Color Space or Profile
- A/B input/output confusion. HOT 1
- Doesn't build on macOS HOT 2
- export path libIccXML2.so.2 HOT 1
- Compile Errors in PR 69 | CIccXformNDLut | CIccApplyNDLutXform | IccProfLib/IccCmm.h | IccProfLib/IccCmm.cpp
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from demoiccmax.