Comments (17)
What kind of timescale are we looking at with creating this? There appears on the surface that there has been very little activity and progress in the repo over the last few months and I'm concerned that the library is not receiving the priority attention it requires.
I've been working on a cross platform c# version of ImageProcessor over the last few months and I seem to have made a lot more progress than here.
However, I simply don't know whether I should continue with my work or abandon it and wait for Microsoft.
It's all very frustrating.
from corefxlab.
Thanks for the update @KrzysztofCwalina I'll keep doing what I'm doing then.
from corefxlab.
Hi, this is a proposal i was sketching,
Api structure proposal
The goal si to provide an API structure to be asy to extend and implement for different domains. Applciation domains can be
- Graphics manipulation and rendering
- Algebraic algotiryrhms
- Statistic applications
Define vectors and matrices as pure algebraic objects
Operators should be focusing on the core requirements to be able to perform all basic operations. Being values those should be immutable, to avoid confusion when adopted in code. Operations should be clear and easy to extend. Different representation should achievable via casting.
If we consider some of the classic methods for intersection, dinstance and projection they can be used efficiently by changing conventions.
A rectangle can have different definition and most approaches distinguish between a generic box or axis aligned box pickinghte right one for the current application.
In a lot of application code is spent into translating the off the shelf rectangle to match the current need.
In this scenario going from cartesian point to polar point wouldbe performed via a cast operator obtaining a brand new point, operator will be specific to the type and some function can actually perform implicit transformations.
At this level is important to realise how different are the mathematical and geometrical domain. Is alwasy possible to add to float4 object but the sum of two points is not really defined (center of mass is actually a weighted average) while subtracting a point from another originates a vector.
Both points and vector can be constructed on a float array with arbitraty size (this could actually take advantage of the simd implementation already present in CoreFX).
from corefxlab.
Once the core math support is in place we could follow that to introduce colour definitions and manipulations, geometric primitives and operations in both 2D and 3D space. Rendering engines (plus image I/O) should be (in my opinion) the last mile covered. That should make possible to have windows based rendering and OpenGL one for cross platform development like iOS and Android. I would really appreciate help and input to shape such layers, I have tons of good intents but is really time the resource I am not plenty of.
from corefxlab.
Maybe listing projects that would be in scope to create replacement primitives for would be useful:
- WPF
- System.Drawing
- SharpDX (https://github.com/sharpdx/SharpDX)
- NGraphics (https://github.com/praeclarum/NGraphics)
- Perspex (https://github.com/grokys/Perspex)
Anything else?
from corefxlab.
- Win2D (https://github.com/Microsoft/Win2D) is important, since it is the only existing library that will actually be targeting coreclr (if I understand correctly).
- In the image processing space, ImageProcessor (http://imageprocessor.org/) was an open-source server-side library mentioned before.
- Aforge.NET (http://www.aforgenet.com/) has a bunch of image processing stuff too.
- MonoGame (https://github.com/mono/MonoGame) does cross-platform 2D and 3D, so might conceivably want to target coreclr/corefx.
from corefxlab.
from corefxlab.
@grokys How would you imagine a set of primitives in corefx would be used in Perspex?
Suppose my Perspex app wants to use ImageProcessor to do some bitmap manipulation. Is it really important (or likely) that the Bitmap
type would be unified? What are the desirable and plausible scenarios for you?
from corefxlab.
@govert I suppose that bitmap should be built on top of some more mathematical structure, part of CoreFx, all those libraries mentioned redefines the same types, the question is what would have been the common layer in CoreFx that could have made all of them interoperable?
from corefxlab.
To partially answer my own question (and add another entry to our list), I found:
- Splat (https://github.com/paulcbetts/splat) - A library to make things cross-platform that should be.
This is what Perspex seems to use for a cross-platform Bitmap type. It has some orthogonal stuff, but for the purpose of this thread, it has Xamarin, WPF, WinForms WinRT packages that do:
- Cross-platform image loading/saving
- A port of System.Drawing.Color for portable libraries
- Cross-platform geometry primitives (PointF, SizeF, RectangleF), as well as a bunch of additional extension methods to make using them easier.
from corefxlab.
@govert - I've not considered usage in Perspex of anything more than the primitives (Point, Rect, Matrix etc), however in the long term I'd like to hand off the actual rendering etc to another backend if one becomes available (I've had my eye on NGraphics but my questions haven't yet been replied to).
If we could just get unified primitives that could be shared with e.g. SharpDX (how likely this is I don't know) it would be useful.
I don't use Splat for Bitmap, at the moment it's using its own implementation backed with the implementation from the rendering backend (e.g. Direct2D, Cairo). AFAIK Splat just tries to make the System.Drawing interfaces x-plat.
from corefxlab.
Maybe https://github.com/xoofx would be interested in this conversation (can you ping people from outside in an issue like that? Who knows).
from corefxlab.
I'm pretty sure you can just ping them like this:
Maybe @xoofx would be interested in this conversation
from corefxlab.
I would image that GTK# would be one of the back-end implementations that needs to be taken into account when deciding on primitives for corefx.
from corefxlab.
cc: @Priya91
from corefxlab.
@JimBobSquarePants, I just saw your comments. We have nobody working actively on this. It's a interesting problem space, but it does not align with our current priorities.
from corefxlab.
I will close this for now. Please let me know if anybody wants to work on it and I will reopen.
from corefxlab.
Related Issues (20)
- unable to get header row HOT 5
- Adding `Microsoft.Data.Analysis` 0.2 to .NET Framework 4.7.1 project adds lots of packages
- Update Spark after 0.3.0 is released HOT 2
- support for skipRows or skipRowPattern
- Support for crosstabs
- "Long to wide" and "wide to long" helper functions
- Passing in DataTypes to DataFrame.LoadCsv loses column name information
- DataFrame.LoadCsv doesn't handle `null` values when it attempts to guess the column types
- Writing dataframe to txt doesn't work properly HOT 7
- Column name indexing removed in .4? HOT 15
- DataFrame status HOT 1
- Nuget Package Query (System.IO.FileSystem.Watcher.Polling)
- Question: What is the status of System.Reflection.TypeLoader? HOT 1
- Question about supported platforms in polling watcher HOT 6
- Suggestion - Add constructor for MultiDictionary that takes IEnumerable of KeyValuePair
- A tsv file wouldn't load properly HOT 4
- [DataFrame] Add a LoadCsv overload or other method that takes CSV content directly HOT 1
- dataframe row escape characters HOT 2
- CoreFxLab is now archived! See dotnet/machinelearning and dotnet/runtimelab instead!
- OrderedDictionary indexer conflict HOT 1
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 corefxlab.