LibJpegTurbo, PInvoking C#

Started by
5 comments, last by ZeroWalker 10 years, 7 months ago

Is anyone familiar to using LibJpegTurbo with C/C++?
If so, are you able to make a PInvoke for use with C#?

As i myself am totally crap at C/C++, i can´t even get LibJpegTurbo to work in it at all, so i do all my work in C#.
But as would really need to get that Jpeg to work, as the inbuilt .Net jpeg Encoder/Decoder isn´t something to kill for.

I don´t think much need´s to be done, as the work is already there, C# can just import the C code more or less i guess.

Well, any thought about this is appreciated as well.

Thanks

Advertisement

Write a C++/CLI wrapper around it. Then call that directly from c#.

Bear in mind that your assembly will be platform specific.

If you have any more specific issues, post back here and I'll try to help.

if you think programming is like sex, you probably haven't done much of either.-------------- - capn_midnight

The thing i am asking is, I don´t understand C++, and i wondered if someone could help me PInvoke it to call the compress/decompress features.
I can´t even get it working with C++ alone, it´s just to different from C# even if they look alike.

Do you really need that specific library?

Is there some specific functionality that you need that the .net framework's image library does not offer?

Looking over the code it looks like the only extraordinary claim the library offers is that it has been tuned for specific architectures. For most images of the type used in games you are talking about a performance difference of microseconds.

Are those microseconds really this important? That is up to you to decide.

Also, note that few games use jpeg format for images. Most games use image formats that do not require decoding and can be passed directly to the video card, such as dds format images.

That said...

You will need to use "unsafe" c# code, work with byte array buffers, and C-style file objects. You will need to ensure your project and permissions are set to allow unsafe code.

Go download PInvoker from pinvoker.com, drop the header file into the tool, extract the few structures you need (JSAMPARRAY, jpeg_decompress_struct, and a few others), look up signatures for the few functions you need (jpeg_start_decompress, jpeg_read_scanlines, jpeg_finish_decompress, and jpeg_destroy_decompress) and use them. I don't see anything particularly difficult about it, other than the fact that you need to make C# placeholders of the structures.

The only thing i really need is something that beats the .Net Jpeg, cause it isn´t that great in terms of quality/size/speed. Especially Quality.

Unsafe code is not a problem. The other part however is, my skills doesn´t really allow for it.

I don´t want to (or more like Can) write much code, just to set it to encode an image.
I can understand the settings like (RGB,YUV etc) Quality, and all that stuff.

But not the way it works (as i tried to use it in C/C++ and couldn´t get it to work. And well i don´t even get anything to really work in C++).

But what i got was that, it needs to create a compress, decompress etc, and then destroy them as the end.

I am used to more, simple stuff, like.

Jpegencoder.Encode (Byte[]);

well, something towards that.

But as said, i am not limited to just wanting to get JpegTurbo, but i want something that´s is fast with imagecompression, in terms of encoding and decoding (and the only thing i can think of, is Jpeg, as there seems to be a standstill when it comes to new image formats).


The only thing i really need is something that beats the .Net Jpeg, cause it isn´t that great in terms of quality/size/speed. Especially Quality.

Have you tried setting the quality level?

if you think programming is like sex, you probably haven't done much of either.-------------- - capn_midnight

Yes i have. It´s Okay, but Libjpeg is likely much better. But sadly, there is no wrapper available.

EDIT:

But well if someone can/has Libjpeg-Turbo working in C#, i would gladly like to know how. Or any other Libjpeg for that matter.

This topic is closed to new replies.

Advertisement