Compress Bmp to Jpeg

Posted on 2009-04-09
Medium Priority
Last Modified: 2012-05-06
Hi all,

I have a Application which does live Video Capturing , using Webcam, and show it to the user(every thing locally). still under stating :-)

Environment:- DirectShow, Win32api, C

Now, want to Compress and Decompress the video frames and show it .

In this regard, as my first step.....
--when ever a Button_click event is fired , i want to grab the image and save that image as JPEG.
--i could able to Grab the image (which is of DIB format).
--i even have the Library which compresses & De-Compresses BMP-JPEG -BMP where Input is .bmp file and Output is .Jpeg

-- When button clicked, i have the BitmapInfoheader & Image Bits.
can you please tell me how to Compress the .bmp(not from file) and save as .jpeg.

/////////////    code which captures Image on Button Clicked   /////////////
DWORD GrabFrame()
       BYTE *lpCurrImage = NULL;
        m_pImageBytes = pImage; // Copies the Image into m_pImageBytes		
        MakeBMPHeader();        // Header
void MakeBMPHeader()
	DWORD  dwBitmapInfoSize;
	dwBitmapInfoSize = sizeof(BITMAPINFO);
	m_pBmp   = (BITMAPINFO *)new BYTE [dwBitmapInfoSize];
	m_pBmp->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    m_pBmp->bmiHeader.biWidth = m_un32ImageWidth;
    m_pBmp->bmiHeader.biHeight = m_un32ImageHeight*-1;	
    m_pBmp->bmiHeader.biPlanes = 1;
    m_pBmp->bmiHeader.biBitCount =(unsigned short) m_un32ImageBits; //CamBits i.e 24
    m_pBmp->bmiHeader.biCompression = BI_RGB;
    m_pBmp->bmiHeader.biSizeImage = 0;
    m_pBmp->bmiHeader.biXPelsPerMeter = 0;
    m_pBmp->bmiHeader.biYPelsPerMeter = 0;
    m_pBmp->bmiHeader.biClrUsed = 0;
    m_pBmp->bmiHeader.biClrImportant = 0;
//////////////////////////////////////   Compression Library   . /////////////////////////////
       /////  .... Where it takes commmand line parameters (i) .Bmp file (ii) .Jpeg(any name of the file
main (int argc, char **argv)
struct jpeg_compress_struct cinfo;
	struct jpeg_error_mgr jerr;
cjpeg_source_ptr src_mgr;
	FILE * input_file;
	FILE * output_file;
if ((input_file = fopen(argv[i], READ_BINARY)) == NULL) {
		fprintf(stderr, "can't open %s\n", argv[i]);
	else {
		fprintf(stderr, "Opened %s\n", argv[i]);
    if ((output_file = fopen(argv[i], WRITE_BINARY)) == NULL) {
		fprintf(stderr, "can't open %s\n", argv[i]);
	else {
		fprintf(stderr, "Opened %s\n", argv[i]);
src_mgr = jinit_read_bmp(&cinfo);
	src_mgr->input_file = input_file;
(*src_mgr->start_input) (&cinfo, src_mgr);
jpeg_stdio_dest(&cinfo, output_file);
jpeg_start_compress(&cinfo, TRUE);
	/* Process data */
while (cinfo.next_scanline < cinfo.image_height) {
		num_scanlines = (*src_mgr->get_pixel_rows) (&cinfo, src_mgr);
		(void) jpeg_write_scanlines(&cinfo, src_mgr->buffer, num_scanlines);
	/* Finish compression and release memory */
	(*src_mgr->finish_input) (&cinfo, src_mgr);
	/* Close files */
	return 0;			/* suppress no-return-value warnings */

Open in new window

Question by:kishan66

Expert Comment

ID: 24109342

Accepted Solution

kishan66 earned 0 total points
ID: 24591793
i found solution myself.
anyways thank you.

Featured Post

7 new features that'll make your work life better

It’s our mission to create a product that solves the huge challenges you face at work every day. In case you missed it, here are 7 delightful things we've added recently to monday to make it even more awesome.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

C++ Properties One feature missing from standard C++ that you will find in many other Object Oriented Programming languages is something called a Property (http://www.experts-exchange.com/Programming/Languages/CPP/A_3912-Object-Properties-in-C.ht…
Container Orchestration platforms empower organizations to scale their apps at an exceptional rate. This is the reason numerous innovation-driven companies are moving apps to an appropriated datacenter wide platform that empowers them to scale at a …
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use nested-loops in the C programming language.
The viewer will learn how to pass data into a function in C++. This is one step further in using functions. Instead of only printing text onto the console, the function will be able to perform calculations with argumentents given by the user.

600 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question