c语言图像处理代码
㈠ c语言实用数字图像处理代码来个会的我们详细商量
具体点,比如内存限制。时间限制,数据量级
㈡ c语言图像处理
c语言不自带图形处理方面的东西。TC特有的头文件graphics.h,其他编译环境都用不了,可移植性是零。而且TC实在太老,与现在c语言标准差距非常大。基本是无法运行现在的代码。所以不太建议你用它。
非要用纯c,可以自己写函数调用WindowsAP和GUI接口。而且需要包含windows.h头文件。
网上有个大神用c—free写的代码在附件里。
/*
纯C通过WindowsAPI编写的基本Windows图形界面
整理加原创,基本上每一句代码都有注释
通过C-Free3.5编译
*/
#include<string.h>//这个头文件在扩展名为.c时是不需要加的
#include<windows.h>//windowsapi必须包含的头文件
LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的前向声明
//参数说明:
//HINSTANCEhInstance当前实例句柄
//HINSTANCEhPrevInstance以前版本的遗留产物,现在总是置为NULL
//LPSTRlpCmdLine命令行的产生,可以从开始->获得程序运行的参数,由此传入
//intnCmdShow程序最初的显示模式,正常,最大化或最小化
//主函数的入口是WinMain,类型为int
//WINAPI标志是一种特定的调用,它定义了一种生成机器代码和放置函数参数的方式
intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpcmdLine,intnCmdShow)
{
//TCHAR,TEXT都是统一单字节和双字节字符的类型,建议使用
staticTCHARszAppName[]=TEXT("MyFirstWindows");
staticTCHARszClassName[]=TEXT("MFWClass");
HWNDhwnd;//一定一个窗口句柄
MSGmsg;//定义一个消息结构体
WNDCLASSwndclass;//定义一个WNDCLASS结构用于注册窗口
wndclass.style=CS_HREDRAW|CS_VREDRAW;//窗口类的类风格,每当水平和垂直大小改变时完全刷新窗口
wndclass.lpfnWndProc=WndProc;//此窗口类所使用的窗口函数的入口地址
wndclass.cbClsExtra=0;//用于在类结构中预留一些额外的空间
wndclass.cbWndExtra=0;//用于在windows内部保存的窗口结构中预留一些额外的空间
wndclass.hInstance=hInstance;//指定所在程序的实例句柄
wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);//定制图标
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//定制鼠标图形
wndclass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);//定义背景颜色
wndclass.lpszMenuName=NULL;//指定窗口类的菜单
wndclass.lpszClassName=szClassName;//指定窗口类的类名
//注册窗口,参数为指向WNDCLASS结构的指针
//如果注册不成功,则弹出一个对话框说明情况
//MessageBox是仅有的可以在旧版本和新版本windows都可以运行的对话框
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("!"),szAppName,MB_ICONERROR);
return0;
}
//创建窗口
hwnd=CreateWindow(
szClassName,//窗口类的名称
TEXT("Title:MyFirstWindowsProgram.这里是标题"),//窗口标题
//WS_OVERLAPPEDWINDOW,//窗口显示风格,这行实际是一个预定义,相当于下面的集合,可以单独设置
WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
CW_USEDEFAULT,//初始x方向的位置
CW_USEDEFAULT,//初始y方向的位置
CW_USEDEFAULT,//初始x方向的大小
CW_USEDEFAULT,//初始y方向的大小
NULL,//父窗口句柄
NULL,//菜单句柄
hInstance,//程序实例句柄
NULL);//创建参数
//显示窗口,第一个参数hwnd是CreateWindow所创建的窗口的句柄
//第二个参数nCmdShow是主函数给的,由快捷方式获得
ShowWindow(hwnd,nCmdShow);
//刷新窗口,给窗口函数,在本程序中即WndProc发送一个WM_PAINT
UpdateWindow(hwnd);
//消息循环
while(GetMessage(&msg,NULL,0,0))//接受自己创建的所有窗口的所有消息
{
TranslateMessage(&msg);//将msg结构体传给windows以进行一些键盘转换,即将击键消息转换为字符消息
DispatchMessage(&msg);//再次将msg结构体传给windows,由windows将该消息发送给适当的窗口函数
}
return(int)msg.wParam;
}
//窗口函数
//参数说明:
//HWNDhwnd,接受消息的窗口句柄,由CreateWindow函数返回
//UINTmessage,消息标志符,用以标识消息,每个消息均有一个唯一对应的消息标识符
//WPARAMwParam,是WORDPARAM的意思,一个32位的消息参数,其含义和数值根据消息的不同而不同
//LPARAMlParam,是LONGPARAM的意思,一个32位的消息参数,其值和消息有关
//CALLBACK函数指由程序员定义,编程实现,而由windows系统调用的函数
LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)
{
HDChdc;//定义一个设备描述表句柄结构体
//定义一个PAINTSTRUCT的绘制信息结构体,
//其包含了包含了当前无效矩形区域的坐标和其他信息,用于刷新用户区的内容
PAINTSTRUCTps;
RECTrect;//定义一个RECT结构体,其有left,top,right,bottom四个域
//处理传进的各种消息
switch(message)
{
//窗口创建
caseWM_CREATE:MessageBox(NULL,"MessageContent:ThisisWM_CREATE,这是WM_CREATE。",
"MessageTiTle这是对话框的标题",MB_OK);
return0;
//窗口绘制
caseWM_PAINT:hdc=BeginPaint(hwnd,&ps);//由BeginPaint开始,返回设备描述表以开始绘图
GetClientRect(hwnd,&rect);//获取用户区域的大小
//格式话文本输出
DrawText(hdc,TEXT("WindowsContent:Iamadeveloper.我为计算机而生。"),
-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);//以EndPaint结束,释放设备描述表句柄
return0;
//窗口消亡
caseWM_DESTROY:MessageBox(NULL,"MessageContent:ThisisWM_DESTROY,这是WM_DESTROY。",
"MessageTiTle这是对话框的标题",MB_OK);
PostQuitMessage(0);
return0;
}
//凡是窗口函数不予处理的消息应交由windows默认消息处理函数DefWindowProc处理
returnDefWindowProc(hwnd,message,wParam,lParam);
}
㈢ 求处理图片bmp文件的程序代码(C语言)
bmp文件由文件头,位图信息头,颜色表,和数据部组成
文件头:
{
WORDbfType;//位图文件的类型,必须为BM(1-2字节)
DWORDbfSize;//位图文件的大小,以字节为单位(3-6字节,低位在前)
WORDbfReserved1;//位图文件保留字,必须为0(7-8字节)
WORDbfReserved2;//位图文件保留字,必须为0(9-10字节)
DWORDbfOffBits;//位图数据的起始位置,以相对于位图(11-14字节,低位在前)
//文件头的偏移量表示,以字节为单位
}BITMAPFILEHEADER;
位图信息头:
{
DWORDbiSize;//本结构所占用字节数(15-18字节)
LONGbiWidth;//位图的宽度,以像素为单位(19-22字节)
LONGbiHeight;//位图的高度,以像素为单位(23-26字节)
WORDbiPlanes;//目标设备的级别,必须为1(27-28字节)
WORDbiBitCount;//每个像素所需的位数,必须是1(双色),(29-30字节)
//4(16色),8(256色)16(高彩色)或24(真彩色)之一
DWORDbiCompression;//位图压缩类型,必须是0(不压缩),(31-34字节)
//1(BI_RLE8压缩类型)或2(BI_RLE4压缩类型)之一
DWORDbiSizeImage;//位图的大小(其中包含了为了补齐行数是4的倍数而添加的空字节),以字节为单位(35-38字节)
LONGbiXPelsPerMeter;//位图水平分辨率,每米像素数(39-42字节)
LONGbiYPelsPerMeter;//位图垂直分辨率,每米像素数(43-46字节)
DWORDbiClrUsed;//位图实际使用的颜色表中的颜色数(47-50字节)
DWORDbiClrImportant;//位图显示过程中重要的颜色数(51-54字节)
}BITMAPINFOHEADER;
打开文件读出这些信息,然后用一个RGB的构造体二维数组(height*width)来读取数据部分
㈣ 求一用c语言来编写的图形编程代码(在tc2.0中编译)
/********************************************************
* 本程序在高分辨率VGA模式下画
* 正弦曲线,需要Egavga.bgi和cga.bgi驱动包的支持
* 相关图形处理函数见《graphics图形和图像函数包.doc》
********************************************************/
#include "stdio.h"
#include "graphics.h"
#include "conio.h"
#include "math.h"
main()
{
int x,y;
double s;
int driver=VGA ,mode=VGAHI ; /*设置显示器的图形模式参数,具体说明见《C语言图形函数.DOC》*/ initgraph(&driver,&mode,""); /*初始化图形模式*/
setbkcolor(BLACK); /*设置背景颜色*/
line(0,0,0,480); /*画Y轴*/
line(0,240,640,240); /*画X轴*/
for(x=0;x<360;x++) /*从0°到360°*/
{
s=sin((x*3.14159*2)/360.0); /*转换成弧度,再计算y值*/
y=480-(s*150+240); /*放大150倍便于显示,位移到屏幕中间+240,倒置480-*/
putpixel(x,y,WHITE);
}
getch();
}
㈤ c语言,简易图像编程处理
看工具是什么。甚至具体需求是什么。
GDI/DX/OPENGL都可以在像素RGB值上直接处理。
等于做离屏渲染。
也可以利用游戏引擎现有的工具库直接实现这些逗比效果。
㈥ 纯C语言实现图像处理
这个不难吧?虽然我不用c,可是说下怎么做,首先打开一个BMP文件,然后按照bmp格式解析到一个数组中,接着进行二值化(这个有很多方法),最后将数组中的数据写入一个新的BMP文件就可以了。
㈦ 用C语言编写程序处理图片bmp文件 1.读取图片的宽度,高度,每个像素所需的位数,水平分辨率,垂直
#include<windows.h>
//读bmp图片需要两个结构
#pragmapack(push,enter_defBM,1)//指定内存对齐单位为1。
typedefstructtagBmpFileHeader
{
WORDbfType;//文件类型BM
DWORDbfSize;//文件大小
WORDbfReserved1;//保留字
WORDbfReserved2;//保留字
DWORDbfOffBits;//位图的数据信息离文件头的偏移量
}BFH;
typedefstructtagBmpImgHeader
{
DWORDbiSize;//表示本结构的大小,0X28
LONGbiWidth;//位图的宽度
LONGbiHeight;//位图的高度
WORDbiPlanes;//位面数永远为1
WORDbiBitCount;//位图的位数
DWORDbiCompression;//压缩类型
DWORDbiSizeImage;//表示位图数据区域的大小
LONGbiXPelsPerMeter;//表示显示设备的水平分辨率
LONGbiYPelsPerMeter;//表示显示设备的垂直分辨率
DWORDbiClrUsed;//实际使用的颜色数目
DWORDbiClrImportant;//重要的颜色数量
}BIH;
#pragmapack(pop,enter_defBM)//恢复默认内存对齐单位。
#defineHDIBHANDLE//位图句柄
DWORDWINAPIDIBNumColors(BYTE*data)
{
WORDwBitCount;
DWORDdwClrUsed=((BIH*)data)->biClrUsed;
if(dwClrUsed!=0)return(WORD)dwClrUsed;
wBitCount=((BIH*)data)->biBitCount;
return1<<wBitCount;
}
WORDWINAPIPaletteSize(BYTE*data)
{
return(WORD)(::DIBNumColors(data)*sizeof(RGBQUAD));
}
BYTE*WINAPIFindDIBBits(BYTE*data)
{
return(data+*(DWORD*)data+::PaletteSize(data));
}
//获取Bmp的宽度
DWORDFARDIBWidth(constBYTE*data)
{
BIH*pbmi;
pbmi=(BIH*)data;
if(pbmi->biSize==sizeof(BIH))returnpbmi->biWidth;
elsereturn-1;
}
//获取Bmp的高度
DWORDFARDIBHeight(constBYTE*data)
{
BIH*pbmi;
pbmi=(BIH*)data;
if(pbmi->biSize==sizeof(BIH))returnpbmi->biHeight;
elsereturn-1;
}
//从文件读取Bmp图像数据
HDIBWINAPIReadDIBFile(FILE*fp)
{
BFHbmf;
HDIBhDIB;
BYTE*pData;
rewind(fp);
if(fread(&bmf,sizeof(BFH),1,fp)!=1)returnNULL;//文件读取错误
if(bmf.bfType!=19778)returnNULL;//文件类型错误
hDIB=(HDIB)::GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,bmf.bfSize);//为DIB分配内存
if(hDIB==0)returnNULL;//内存分配失败。
pData=(BYTE*)::GlobalLock((HGLOBAL)hDIB);//锁定
if(fread(pData,1,bmf.bfSize-sizeof(BFH),fp)!=(bmf.bfSize-sizeof(BFH)))//文件读取错误
{
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
::GlobalFree((HGLOBAL)hDIB);//释放内存
returnNULL;
}
::GlobalUnlock((HGLOBAL)hDIB);//解除锁定
returnhDIB;//返回DIB句柄
}
BOOLWINAPIPaintDIB(HDChDC,intposX,intposY,HDIBhDIB)
{
BYTE*pDIBHd;//BITMAPINFOHEADER指针
BYTE*pDIBBits;//DIB象素指针
BOOLbSuccess=FALSE;//成功标志
HPALETTEhPal=NULL;//DIB调色板
//HPALETTEhOldPal=NULL;//以前的调色板
if(hDIB==NULL)returnFALSE;//判断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);//解除锁定
returnbSuccess;
}
//打印位图信息
VOIDWINAPIPrintDIBInfo(HDIBhDIB)
{
BYTE*pDIBHd=(BYTE*)::GlobalLock((HGLOBAL)hDIB);
BIH*pbmi=(BIH*)pDIBHd;
constchar*lp[]=
{
"位图信息长度:%d ",
"位图图像大小:%dx%d ",
"位面数:%d ",
"位图颜色深度:%d ",
"位图数据压缩类型:%d ",
"位图数据区域大小:%d ",
"位图分辨率:水平%ddpi,垂直%ddpi ",
};
printf("WindowsV3cBitmapInfoHeader信息 ");
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);//解除锁定
}intmain(intargc,char*argv[])
{
HDIBx;
FILE*fp=fopen("1.bmp","rb");
if(fp==NULL)return-1;
x=ReadDIBFile(fp);
printf("DIBhandle%u",x);
PaintDIB(GetDC(NULL),0,0,x);
PrintDIBInfo(x);
return0;
}
㈧ 求一个有关图像处理的C语言程序
int blacknum=0;
char str1[128];
typedef int (WINAPI ICEPUB_GETIMGBLACKS)(char *strImgFilename);
ICEPUB_GETIMGBLACKS *icePub_getImgfileBlacks = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_getImgfileBlacks=(ICEPUB_GETIMGBLACKS *)GetProcAddress(hDLLDrv,"icePub_getImgfileBlacks");
}
if(icePub_getImgfileBlacks)
{
blacknum = icePub_getImgfileBlacks("e:\a.jpg");
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
sprintf(str1,"blacknum=%d",blacknum);
AfxMessageBox(str1);
http://dl.icese.net/dev.php?f=icePubDll.rar 下载
㈨ 100分求救!关于C语言图像图像处理的问题!!
我也编过这样的程序,
应该是这样
#include dos.h
#include <graphics.h>
int main()
{
int gdriver=DETECT, gmode;
initgraph(&gdriver, &gmode, "c:\\tc");
cleardevice();
setbkcolor(BLUE);
setcolor(RED);
bar3d(100, 100, 300, 250, 50, 2); /*画一长方体*/
getch();
cleardevice();
closegraph();
}
㈩ C语言中,图像处理函数的使用
Tc中用initgraph()函数可以切换到图形模式,用closegraph()可以从图形模式切换回字符模式。
initgraph()和closegraph()都是图形函数,使用图形函数必须包括头文件"graphics.h"。
void far i nitgraph(int far *graphdriver, int far *graphmode,char far *pathtodriver);
graphdriver是指向图形驱动序号变量的指针,
graphmode是在graphdriver选定后,指向图形显示模式序号变量的指针,
pathtodriver表示存放图形驱动文件的路径。
图形驱动序号不同,图形驱动文件也不同。序号为VGA图形驱动对应"egavga.bgi"这个图形驱动文件。
"egavga.bgi"一般在 Tc目录下
例如:
-------
#include <graphics.h>
int Drive,Mode=DETECT;
initgraph(&Drive,&Mode,""); //图形显示器、显示模式、路径自动检测
运行时需要在当前目录下存在 EGAVGA.BGI文件
在TC\BGI目录底下
-------
如果编译后的.exe文件在另外一个目录(如编译后的.exe文件在D:\MyTc 目录下,而编译器的程序和.BGI文件在C:\Turboc\bin 目录下,则需要填上BGI文件的路径
例如:
initgraph(&Drive,&Mode,"C:\\Turboc\\bgi");