RGB888 (24 bit) to PNG/JPEG image algorithm - c

I need to convert 24 bit RGB(888) image data to PNG or JPEG image (whichever possible). Need simpler approach to do this same like converting RGB888 to BMP without any compression. Would be great if it is something like adding PNG/JPEG headers to the RGB data with/without little modification. Ready to provide more details on request..
Thanks in advance..
Language/Platform : C/Linux

Use miniz - a.k.a single C source file Deflate/Inflate compression library with zlib-compatible API, ZIP archive reading/writing, PNG writing.

If you just need an image format then the easiest is probably ppm (or pgm for greyscale)
You just need to add a small ascii header to the uncompressed binary data and most image apps will read it.
P6 <-- magic value for binary data
# a comment if you want
640 480 <-- width x height
255 <-- max pixel value
.... binary data here .......

Related

JPEG Image Binary File (HEX format) merging (QVGA / VGA)

I need to generate a QVGA Image (320x 240) from RGB888. Due to memory constrain of the controller I have generated 3 JPEG images of (320 X 80). Now I need to merge these 3 (320 X 80) JPEG images to generate one complete QVGA JPEG image (320 x 240). I have Hex files for the 3 JPEG Images. Is there any C source file available to do other than OpenCV concept ???
What I have tried ?
Tried to Match the JPEG Header in the binary file : first half of the image is clear, remaining part is distorted.
What I'm expecting ?
C source file to merge the 3 or more JPEG Binary files to One.

Issues while recreating a TIFF file with 1D encoded data

This is regarding Fax Image compression. Initially I had an Uncompressed TIFF file , I wrote a code to extract its tags and the Image data present in it. Once I extracted the image data I performed 1D modefied Huffman coding/ Run length coding on it to get the encoded compressed data which I have stored in a textfile.
Now I am trying to recreate a TIFF file by modifying the tags appropriately to store the encoded compressed data. I have writen a code to recreate the tiff file and when I open the tiff file with an appliction to view all the tags, I find that all the tags I have put are correctly being read. However, when I use an online tiff viewer I do not get the correct image. I am confident that my encoded data is correct according to the Huffman Runlength tables. Anyone has any idea why I am not able to view the same Image with my compressed tiff file?
Note : I have not used any C libraries such as libtiff, The tiff file is just created by opening a tiff file and writing specific values at different offsets based on the tiff file stucture.
Thank you.
The Original Uncompressed file
The 1D encoded compressed file

.png file has only one channel read by python while 4 RGBA channels by C?

I used python to read a .png image and the array is shaped 2048 x 2048, with one channel per pixel.
import numpy as np
img = np.array(imread('test.png'))
height, width = img.shape # 2048 x 2048
However, it seems that every pixel in .png files should have 4 channels(i.e R,G,B,A).
Now I have to switch from python to C.
I'm confused how should I read the image. The question is, the image I want to read is a 2-color-image, which means I don't need to care about the RGBA values.
So why the python code gives that result? And how can I handle .png file under this circumstance?
P.S: I use PNG.h to read .png file in C.

How to encode pixel data into a video format?

I'm using ESCAPI to capture webcam, it captures the frames in form of RGB pixel data, I've stored the RGB pixel data into a file but the file is huge 200MB for 15s video of 320x240.
I want to encode that pixel data into a video format.
I'm using MinGW on windows.
First use any encoder
I suggest H264 codec for encoding
so find its library for encoding and encode it
Then find any container File formats
I suggest Matroska (.mkv file)
so find its library for muxing encoded h264 in .mkv
Good begining is start with ffmpeg libraries.

jpg file transfer using a socket_stream in C

I was wondering if sending a file with a jpg extension through a socket_stream, this automatically makes the transformation of bytes to jpg ? or need to implement some algorithm to transform the lot of bytes to image... Please could somebody explain me the way to do?
JPEG images are nothing but a bunch of bytes organized according to the JPEG format. A network socket isn't going to organize random bytes into the JPEG format. You can send the bytes that make up a JPEG formatted image across a socket as a binary blob, receive it on the other end, and write it to a file with a .jpg extension. An application can interpret this file as a JPEG image based on the extension and try to display it. But you are still responsible for providing a set of bytes that are organized as a JPEG image.

Resources