如何使用C语言实现JPEG图像格式的读取与写入??

Python010

如何使用C语言实现JPEG图像格式的读取与写入??,第1张

1.图片也是属于文件类型的一种,图片属于二进制文件。使用fopen函数的二进制模式“rb”就可以打开。

2.例程:

    #include <stdlib.h>

    #include <stdio.h>

    int main ()

    {

        FILE * fpPhoto, * fpText, * fpTarget 

        int     iRead 

        char    szBuf[100] 

          

        printf ("请输入第一个文件名(bmp):\n") 

        gets (szBuf) 

        fpPhoto = fopen (szBuf, "rb") 

        printf ("请输入第二个文件名(txt):\n") 

        gets (szBuf) 

        fpText = fopen (szBuf, "rb") 

        printf ("请输入目的文件名(bmp):\n") 

        gets (szBuf) 

        fpTarget = fopen (szBuf, "wb") 

      

        if (!fpPhoto || !fpText || !fpTarget)

        {

            printf ("打开文件失败!\n") 

            system("pause") 

            return -1 

        }

      

        while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpPhoto)) > 0)

            fwrite (szBuf, 1, iRead, fpTarget) 

        while ((iRead = fread (szBuf, 1, sizeof (szBuf), fpText)) > 0)

            fwrite (szBuf, 1, iRead, fpTarget) 

      

        fclose (fpPhoto) 

        fclose (fpText) 

        fclose (fpTarget) 

        return 0 

    }

原型

int WINAPI icePub_getImgfilePColor(char *strImgFilename,int x,int y,char *strR,char *strG,char *strB,int flag)

输入:strImgFilename 待处理的图片文件名

x x坐标

y y坐标

flag 输出RGB值的格式,0 10进制,1 16进制

输出:strR R值

strG G值

strB B值

返回码:0 OK-2 x,y值超出图片长宽

int retCode=-1

char strR[128],strG[128],strB[128]

Cstring m_mem

typedef int (WINAPI ICEPUB_GETIMGFILEPCOLOR)(char *strImgFilename,int x,int y,char *strR,char *strG,char *strB,int flag)

ICEPUB_GETIMGFILEPCOLOR *icePub_getImgfilePColor = 0

HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll")

if(hDLLDrv)

icePub_getImgfilePColor = (ICEPUB_GETIMGFILEPCOLOR *)GetProcAddress(hDLLDrv, "icePub_getImgfilePColor")

if(icePub_getImgfilePColor)

retCode=icePub_getImgfilePColor("a.jpg",100,55,strR,strG,strB,0)

if(hDLLDrv)

FreeLibrary(hDLLDrv)

if(retCode == 0)

m_mem.Format("(x,y):%d,%d\r\nR:%s\r\nG:%s\r\nB:%s",point.x,point.y,strR,strG,strB)

AfxMessageBox(m_mem)

原型:

int WINAPI icePub_imgToFileTextdata(char *strImgFilename,char *strFilename,char *strFenge,int flag)

输入:strImgFilename 待处理图像文件 (会被强制256级灰度化)

strFilename 待生成BMP文本数据文件名

strFenge 列之间分隔符

flag 文本数据格式标志:0 10进制1 16进制10 RGB16进制

输出:

extern "C"

{

__declspec(dllexport)

int WINAPI icePub_imgToFileTextdata(char *strImgFilename,char *strFilename,char *strFenge,int flag)

}

#pragma comment(lib,"icePubDll.lib")

icePub_imgToFileTextdata("a.jpg","bmpdata.txt",",",0)

原型:

char * WINAPI icePub_getBufferFromImg2(char *strImgFilename,int *width,int *height,int huiGrade)

输入:strImgFilename 图片文件名

huiGrade 图像灰度化标志,0 no>1 and <=256 灰度级

输出:width 图像宽度

height 图像高度

返回值:图像的点阵数据(按照24位BMP格式)

extern "C"

{

__declspec(dllexport)

char * WINAPI icePub_getBufferFromImg2(char *strImgFilename,int *width,int *height,int huiGrade)

}

#pragma comment(lib,"icePubDll.lib")

char *bmpBuffer=NULL

int imgWidth, imgHeight

bmpBuffer = icePub_getBufferFromImg2 ("e:\\a.jpg",&imgWidth,&imgHeight,0)

//然后对bmpBuffer数据处理即可

if(bmpBuffer != NULL)

free(bmpBuffer)