c语言获取图像高度的函数 c语言获取图像高度的函数是什么

C语言中怎样获得jpg图片的宽和高?

lt;%

创新互联建站为客户提供专业的成都网站制作、成都网站设计、外贸营销网站建设、程序、域名、空间一条龙服务,提供基于WEB的系统开发. 服务项目涵盖了网页设计、网站程序开发、WEB系统开发、微信二次开发、成都手机网站制作等网站方面业务。

Class ImgWHInfo '获取图片宽度和高度的类,支持JPG,GIF,PNG,BMP

Dim ASO

Private Sub Class_Initialize

Set ASO=Server.CreateObject("ADODB.Stream")

ASO.Mode=3

ASO.Type=1

ASO.Open

End Sub

Private Sub Class_Terminate

Err.Clear

Set ASO=Nothing

End Sub

Private Function Bin2Str(Bin)

Dim I, Str

For I=1 To LenB(Bin)

clow=MidB(Bin,I,1)

If ASCB(clow)128 Then

Str = Str Chr(ASCB(clow))

Else

I=I+1

If I = LenB(Bin) Then Str = Str Chr(ASCW(MidB(Bin,I,1)clow))

End If

Next

Bin2Str = Str

End Function

Private Function Num2Str(Num,Base,Lens)

Dim Ret

Ret = ""

While(Num=Base)

Ret = (Num Mod Base) Ret

Num = (Num - Num Mod Base)/Base

Wend

Num2Str = Right(String(Lens,"0") Num Ret,Lens)

End Function

Private Function Str2Num(Str,Base)

Dim Ret,I

Ret = 0

For I=1 To Len(Str)

Ret = Ret *base + Cint(Mid(Str,I,1))

Next

Str2Num=Ret

End Function

Private Function BinVal(Bin)

Dim Ret,I

Ret = 0

For I = LenB(Bin) To 1 Step -1

Ret = Ret *256 + AscB(MidB(Bin,I,1))

Next

BinVal=Ret

End Function

Private Function BinVal2(Bin)

Dim Ret,I

Ret = 0

For I = 1 To LenB(Bin)

Ret = Ret *256 + AscB(MidB(Bin,I,1))

Next

BinVal2=Ret

End Function

Private Function GetImageSize(filespec)

Dim bFlag

Dim Ret(3)

ASO.LoadFromFile(filespec)

bFlag=ASO.Read(3)

Select Case Hex(binVal(bFlag))

Case "4E5089":

ASO.Read(15)

ret(0)="PNG"

ret(1)=BinVal2(ASO.Read(2))

ASO.Read(2)

ret(2)=BinVal2(ASO.Read(2))

Case "464947":

ASO.read(3)

ret(0)="gif"

ret(1)=BinVal(ASO.Read(2))

ret(2)=BinVal(ASO.Read(2))

Case "535746":

ASO.read(5)

binData=ASO.Read(1)

sConv=Num2Str(ascb(binData),2 ,8)

nBits=Str2Num(left(sConv,5),2)

sConv=mid(sConv,6)

While(len(sConv)nBits*4)

binData=ASO.Read(1)

sConv=sConvNum2Str(AscB(binData),2 ,8)

Wend

ret(0)="SWF"

ret(1)=Int(Abs(Str2Num(Mid(sConv,1*nBits+1,nBits),2)-Str2Num(Mid(sConv,0*nBits+1,nBits),2))/20)

ret(2)=Int(Abs(Str2Num(Mid(sConv,3*nBits+1,nBits),2)-Str2Num(Mid(sConv,2*nBits+1,nBits),2))/20)

Case "FFD8FF":

Do

Do: p1=binVal(ASO.Read(1)): Loop While p1=255 And Not ASO.EOS

If p1191 And p1196 Then Exit Do Else ASO.read(binval2(ASO.Read(2))-2)

Do:p1=binVal(ASO.Read(1)):Loop While p1255 And Not ASO.EOS

Loop While True

ASO.Read(3)

ret(0)="JPG"

ret(2)=binval2(ASO.Read(2))

ret(1)=binval2(ASO.Read(2))

Case Else:

If left(Bin2Str(bFlag),2)="BM" Then

ASO.Read(15)

ret(0)="BMP"

ret(1)=binval(ASO.Read(4))

ret(2)=binval(ASO.Read(4))

Else

ret(0)=""

End If

End Select

ret(3)="width=""" ret(1) """ height=""" ret(2) """"

getimagesize=ret

End Function

Public Function imgW(IMGPath)

Dim FSO,IMGFile,FileExt,Arr

Set FSO = Server.CreateObject("Scripting.FileSystemObject")

If (FSO.FileExists(IMGPath)) Then

Set IMGFile = FSO.GetFile(IMGPath)

FileExt=FSO.GetExtensionName(IMGPath)

Select Case FileExt

Case "gif","bmp","jpg","png":

Arr=GetImageSize(IMGFile.Path)

imgW = Arr(1)

End Select

Set IMGFile=Nothing

Else

imgW = 0

End If

Set FSO=Nothing

End Function

Public Function imgH(IMGPath)

Dim FSO,IMGFile,FileExt,Arr

Set FSO = server.CreateObject("Scripting.FileSystemObject")

If (FSO.FileExists(IMGPath)) Then

Set IMGFile = FSO.GetFile(IMGPath)

FileExt=FSO.GetExtensionName(IMGPath)

Select Case FileExt

Case "gif","bmp","jpg","png":

Arr=getImageSize(IMGFile.Path)

imgH = Arr(2)

End Select

Set IMGFile=Nothing

Else

imgH = 0

End If

Set FSO=Nothing

End Function

End Class

IMGPath="Test.jpg"

Set PP = New ImgWHInfo

W = PP.imgW(Server.Mappath(IMGPath))

H = PP.imgH(Server.Mappath(IMGPath))

Set pp = Nothing

Response.Write("img src='"IMGPath"' border=0br宽:"W";高:"H)

%

用C语言编写程序处理图片bmp文件 1.读取图片的宽度,高度,每个像素所需的位数,水平分辨率,垂直

#include windows.h

//读bmp图片需要两个结构

#pragma pack(push, enter_defBM, 1) //指定内存对齐单位为1。

typedef struct tagBmpFileHeader

{

WORD  bfType;      // 文件类型  BM

DWORD bfSize;      // 文件大小

WORD  bfReserved1; // 保留字

WORD  bfReserved2; // 保留字

DWORD bfOffBits;   // 位图的数据信息离文件头的偏移量

} BFH;

typedef struct tagBmpImgHeader

{

DWORD biSize;          // 表示本结构的大小,0X28

LONG  biWidth;         // 位图的宽度

LONG  biHeight;        // 位图的高度

WORD  biPlanes;        // 位面数永远为1

WORD  biBitCount;      // 位图的位数

DWORD biCompression;   // 压缩类型

DWORD biSizeImage;     // 表示位图数据区域的大小

LONG  biXPelsPerMeter; // 表示显示设备的水平分辨率

LONG  biYPelsPerMeter; // 表示显示设备的垂直分辨率

DWORD biClrUsed;       // 实际使用的颜色数目

DWORD biClrImportant;  // 重要的颜色数量

} BIH;

#pragma pack(pop, enter_defBM) //恢复默认内存对齐单位。

#define HDIB HANDLE // 位图句柄

DWORD WINAPI DIBNumColors(BYTE * data)

{

WORD wBitCount;

DWORD dwClrUsed = ((BIH *)data)-biClrUsed;

if (dwClrUsed != 0) return (WORD)dwClrUsed;

wBitCount = ((BIH *)data)-biBitCount;

return 1  wBitCount;

}

WORD WINAPI PaletteSize(BYTE * data)

{

return (WORD)(::DIBNumColors(data) * sizeof(RGBQUAD));

BYTE *  WINAPI FindDIBBits(BYTE * data)

{

return (data + *(DWORD *)data + ::PaletteSize(data));

}

// 获取Bmp的宽度

DWORD FAR DIBWidth(const BYTE * data)   

{   

BIH * pbmi;

pbmi = (BIH *)data; 

if(pbmi-biSize == sizeof(BIH)) return pbmi-biWidth;

else return -1;

}   

// 获取Bmp的高度

DWORD FAR DIBHeight(const BYTE * data)   

{   

BIH * pbmi;

pbmi = (BIH *)data; 

if(pbmi-biSize == sizeof(BIH)) return pbmi-biHeight;

else return -1;

}   

// 从文件读取Bmp图像数据

HDIB WINAPI ReadDIBFile(FILE * fp)

{

BFH    bmf;

HDIB   hDIB;

BYTE * pData;

rewind(fp);

if(fread(bmf, sizeof(BFH), 1, fp) != 1) return NULL; // 文件读取错误

if(bmf.bfType != 19778) return NULL;                  // 文件类型错误

hDIB = (HDIB) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, bmf.bfSize); // 为DIB分配内存

if (hDIB == 0) return NULL;                           // 内存分配失败。

pData = (BYTE *)::GlobalLock((HGLOBAL) hDIB);         // 锁定

if(fread(pData, 1, bmf.bfSize - sizeof(BFH), fp) != (bmf.bfSize - sizeof(BFH))) // 文件读取错误

{

::GlobalUnlock((HGLOBAL) hDIB); // 解除锁定

::GlobalFree((HGLOBAL) hDIB);   // 释放内存

return NULL;

}

::GlobalUnlock((HGLOBAL) hDIB);     // 解除锁定

return hDIB;                        // 返回DIB句柄

}

BOOL WINAPI PaintDIB(HDC hDC, int posX, int posY, HDIB hDIB)

{

BYTE *   pDIBHd;             // BITMAPINFOHEADER指针

BYTE *   pDIBBits;           // DIB象素指针

BOOL     bSuccess = FALSE;   // 成功标志

HPALETTE hPal     = NULL;    // DIB调色板

//HPALETTE hOldPal  = NULL;    // 以前的调色板

if (hDIB == NULL) return FALSE;                    // 判断DIB对象是否为空

pDIBHd    = (BYTE *) ::GlobalLock((HGLOBAL) hDIB); // 锁定DIB

pDIBBits  = ::FindDIBBits(pDIBHd);                 // 找到DIB图像象素起始位置

::SetStretchBltMode(hDC, COLORONCOLOR);            // 设置显示模式

// 调用SetDIBitsToDevice()来绘制DIB对象

bSuccess = ::SetDIBitsToDevice(hDC, // hDC

posX, posY, 

   ((BIH *)pDIBHd)-biWidth,    // nDestWidth

   ((BIH *)pDIBHd)-biHeight,   // nDestHeight

0,                           // SrcX

0,                           // SrcY

0,                           // nStartScan

(WORD)DIBHeight(pDIBHd),     // nNumScans

pDIBBits,                    // lpBits

(LPBITMAPINFO)pDIBHd,        // lpBitsInfo

DIB_RGB_COLORS);             // wUsage

::GlobalUnlock((HGLOBAL) hDIB);     // 解除锁定

return bSuccess;

}

// 打印位图信息

VOID WINAPI PrintDIBInfo(HDIB hDIB)

{

BYTE *   pDIBHd = (BYTE *)::GlobalLock((HGLOBAL) hDIB);

BIH *    pbmi   = (BIH *)pDIBHd;

const char *lp[] = 

{

"位图信息长度: %d\n",

"位图图像大小: %dx%d\n",

"位面数:%d\n",

"位图颜色深度: %d\n",

"位图数据压缩类型: %d\n",

"位图数据区域大小: %d\n",

"位图分辨率: 水平 %d dpi, 垂直 %d dpi\n",

};

printf("Windows V3 cBitmapInfoHeader 信息\n\n");

printf(lp[0], pbmi-biSize);

printf(lp[1], pbmi-biWidth, pbmi-biHeight);

printf(lp[2], pbmi-biPlanes);

printf(lp[3], pbmi-biBitCount);

printf(lp[4], pbmi-biCompression);

printf(lp[5], pbmi-biSizeImage);

printf(lp[6], (LONG)(pbmi-biXPelsPerMeter * 0.0254f + 0.5f), (LONG)(pbmi-biYPelsPerMeter * 0.0254f + 0.5f));

::GlobalUnlock((HGLOBAL) hDIB);     // 解除锁定

}

int main(int argc, char* argv[])

{

HDIB x;

FILE * fp = fopen("1.bmp", "rb");

if(fp==NULL) return -1;

x = ReadDIBFile(fp);

printf("DIB handle %u", x);

PaintDIB(GetDC(NULL), 0, 0, x);

PrintDIBInfo(x);

return 0;

}

c语言调用图片函数

c语言调用图片函数

据我所知Matlab有,imshow(),c好象没有,c只能先将图片读到内存中,经过相关处理后以一定的格式保存到硬盘中,然后再打开图片.

读图和存图需要有专门的函数,这些可以参考:

unsigned char* ReadBMPData(int Width, int Height, char *fname)//图像的宽和高,图像的位置(包括后缀)

{

unsigned char* image = new unsigned char[Width*Height];

FILE *fp;

fp = fopen(fname, "rb");

fread(image, 1, Width*Height, fp);

fclose(fp);

return image;

}

///////////////////////////

void WriteRawData(unsigned char* image, int Width, int Height, char *fname)

{

FILE *fp;

fp = fopen(fname, "wb");

fwrite(image, 1, Width*Height, fp);

fclose(fp);

}


本文名称:c语言获取图像高度的函数 c语言获取图像高度的函数是什么
网页路径:http://cdiso.cn/article/doppehs.html

其他资讯