putpixel
成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)肅州,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
功 能: 在指定位置畫一像素
用 法: void far putpixel (int x, int y, int pixelcolor);
initgraph
功 能: 初始化圖形系統(tǒng)
函數(shù)原型: void far initgraph(int far *graphdriver, int far *graphmode,
我在C語言程序設(shè)計(jì)這本書沒有見過這兩個(gè)函數(shù)
當(dāng)你想控制屏幕輸出的內(nèi)容的時(shí)候就會(huì)用到的
turbo c 現(xiàn)在基本被遺忘了 學(xué)校應(yīng)該還在用vc++6.0
分類函數(shù),所在函數(shù)庫為ctype.h
int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0
int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數(shù)字('0'-'9')
返回非0值,否則返回0
int isascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0
int iscntrl(int ch) 若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F)
返回非0值,否則返回0
int isdigit(int ch) 若ch是數(shù)字('0'-'9')返回非0值,否則返回0
int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否則返回0
int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0
int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0
int ispunct(int ch) 若ch是標(biāo)點(diǎn)字符(0x00-0x1F)返回非0值,否則返回0
int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回車符('\r'),
走紙換行('\f'),垂直制表符('\v'),換行符('\n')
返回非0值,否則返回0
int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0
int isxdigit(int ch) 若ch是16進(jìn)制數(shù)('0'-'9','A'-'F','a'-'f')返回非0值,
否則返回0
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
數(shù)學(xué)函數(shù),所在函數(shù)庫為math.h、stdlib.h、string.h、float.h
int abs(int i) 返回整型參數(shù)i的絕對值
double cabs(struct complex znum) 返回復(fù)數(shù)znum的絕對值
double fabs(double x) 返回雙精度參數(shù)x的絕對值
long labs(long n) 返回長整型參數(shù)n的絕對值
double exp(double x) 返回指數(shù)函數(shù)ex的值
double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中
double ldexp(double value,int exp); 返回value*2exp的值
double log(double x) 返回logex的值
double log10(double x) 返回log10x的值
double pow(double x,double y) 返回xy的值
double pow10(int p) 返回10p的值
double sqrt(double x) 返回+√x的值
double acos(double x) 返回x的反余弦cos-1(x)值,x為弧度
double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度
double atan(double x) 返回x的反正切tan-1(x)值,x為弧度
double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度
double cos(double x) 返回x的余弦cos(x)值,x為弧度
double sin(double x) 返回x的正弦sin(x)值,x為弧度
double tan(double x) 返回x的正切tan(x)值,x為弧度
double cosh(double x) 返回x的雙曲余弦cosh(x)值,x為弧度
double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度
double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度
double hypot(double x,double y) 返回直角三角形斜邊的長度(z),
x和y為直角邊的長度,z2=x2+y2
double ceil(double x) 返回不小于x的最小整數(shù)
double floor(double x) 返回不大于x的最大整數(shù)
void srand(unsigned seed) 初始化隨機(jī)數(shù)發(fā)生器
int rand() 產(chǎn)生一個(gè)隨機(jī)數(shù)并返回這個(gè)數(shù)
double poly(double x,int n,double c[])從參數(shù)產(chǎn)生一個(gè)多項(xiàng)式
double modf(double value,double *iptr)將雙精度數(shù)value分解成尾數(shù)和階
double fmod(double x,double y) 返回x/y的余數(shù)
double frexp(double value,int *eptr) 將雙精度數(shù)value分成尾數(shù)和階
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成浮點(diǎn)數(shù)并返回這個(gè)浮點(diǎn)數(shù)
double atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整數(shù)并返回這個(gè)整數(shù)
double atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整數(shù)并返回這個(gè)整數(shù)
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),
并返回這個(gè)數(shù),
int matherr(struct exception *e)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
unsigned int _clear87() 清除浮點(diǎn)狀態(tài)字并返回原來的浮點(diǎn)狀態(tài)
void _fpreset() 重新初使化浮點(diǎn)數(shù)學(xué)程序包
unsigned int _status87() 返回浮點(diǎn)狀態(tài)字
int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當(dāng)前的工作目錄,成
功返回0
int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功
返回0
pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"
ffblk為指定的保存文件信息的一個(gè)結(jié)構(gòu),定義如下:
┏━━━━━━━━━━━━━━━━━━━━┓
┃struct ffblk ┃
┃{ ┃
┃ char ff_reserved[21]; /*DOS保留字*/ ┃
┃ char ff_attrib; /*文件屬性*/ ┃
┃ int ff_ftime; /*文件時(shí)間*/ ┃
┃ int ff_fdate; /*文件日期*/ ┃
┃ long ff_fsize; /*文件長度*/ ┃
┃ char ff_name[13]; /*文件名*/ ┃
┃} ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
attrib為文件屬性,由以下字符代表
┏━━━━━━━━━┳━━━━━━━━━┓
┃FA_RDONLY 只讀文件┃FA_LABEL 卷標(biāo)號 ┃
┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃
┃FA_SYSTEM 系統(tǒng)文件┃FA_ARCH 檔案 ┃
┗━━━━━━━━━┻━━━━━━━━━┛
例:
struct ffblk ff;
findfirst("*.wps",ff,FA_RDONLY);
int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0
void fumerge(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等)組成一個(gè)文件名
存與path中.
int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)
此函數(shù)將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),
文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等),并分別存入相應(yīng)的變量中.
int getcurdir(int drive,char *direc) 此函數(shù)返回指定驅(qū)動(dòng)器的當(dāng)前工作目錄名稱
drive 指定的驅(qū)動(dòng)器(0=當(dāng)前,1=A,2=B,3=C等)
direc 保存指定驅(qū)動(dòng)器當(dāng)前工作路徑的變量 成功返回0
char *getcwd(char *buf,iint n) 此函數(shù)取當(dāng)前工作目錄并存入buf中,直到n個(gè)字
節(jié)長為為止.錯(cuò)誤返回NULL
int getdisk() 取當(dāng)前正在使用的驅(qū)動(dòng)器,返回一個(gè)整數(shù)(0=A,1=B,2=C等)
int setdisk(int drive) 設(shè)置要使用的驅(qū)動(dòng)器drive(0=A,1=B,2=C等),
返回可使用驅(qū)動(dòng)器總數(shù)
int mkdir(char *pathname) 建立一個(gè)新的目錄pathname,成功返回0
int rmdir(char *pathname) 刪除一個(gè)目錄pathname,成功返回0
char *mktemp(char *template) 構(gòu)造一個(gè)當(dāng)前目錄上沒有的文件名并存于template中
char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,
,此函數(shù)使用DOS的PATH變量,未找到文件返回NULL
進(jìn)程函數(shù),所在函數(shù)庫為stdlib.h、process.h
void abort() 此函數(shù)通過調(diào)用具有出口代碼3的_exit寫一個(gè)終止信息于stderr,
并異常終止程序。無返回值
int exec…裝入和運(yùn)行其它程序
int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)
int execle( char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int execlp( char *pathname,char *arg0,char *arg1,…,NULL)
int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])
int execv( char *pathname,char *argv[])
int execve( char *pathname,char *argv[],char *envp[])
int execvp( char *pathname,char *argv[])
int execvpe(char *pathname,char *argv[],char *envp[])
exec函數(shù)族裝入并運(yùn)行程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯(cuò)返回-1
在exec函數(shù)族中,后綴l、v、p、e添加到exec后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí),函數(shù)可以利用DOS的PATH變量查找子程序文件。
l時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)固定。
v時(shí),函數(shù)中被傳遞的參數(shù)個(gè)數(shù)不固定。
e時(shí),函數(shù)傳遞指定參數(shù)envp,允許改變子進(jìn)程的環(huán)境,
無后綴e時(shí),子進(jìn)程使用當(dāng)前程序的環(huán)境。
void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場
void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫緩沖區(qū)的輸出(等待輸出),
并調(diào)用任何寄存器的"出口函數(shù)",無返回值
int spawn…運(yùn)行子程序
int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL)
int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,
char *argn,NULL,char *envp[])
int spawnv( int mode,char *pathname,char *argv[])
int spawnve( int mode,char *pathname,char *argv[],char *envp[])
int spawnvp( int mode,char *pathname,char *argv[])
int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])
spawn函數(shù)族在mode模式下運(yùn)行子程序pathname,并將參數(shù)
arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯(cuò)返回-1
mode為運(yùn)行模式
mode為 P_WAIT 表示在子程序運(yùn)行完后返回本程序
P_NOWAIT 表示在子程序運(yùn)行時(shí)同時(shí)運(yùn)行本程序(不可用)
P_OVERLAY表示在本程序退出后運(yùn)行子程序
在spawn函數(shù)族中,后綴l、v、p、e添加到spawn后,
所指定的函數(shù)將具有某種操作能力
有后綴 p時(shí), 函數(shù)利用DOS的PATH查找子程序文件
l時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)固定.
v時(shí), 函數(shù)傳遞的參數(shù)個(gè)數(shù)不固定.
e時(shí), 指定參數(shù)envp可以傳遞給子程序,允許改變子程序運(yùn)行環(huán)境.
當(dāng)無后綴e時(shí),子程序使用本程序的環(huán)境.
int system(char *command) 將MSDOS命令command傳遞給DOS執(zhí)行
轉(zhuǎn)換子程序,函數(shù)庫為math.h、stdlib.h、ctype.h、float.h
char *ecvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *fcvt(double value,int ndigit,int *decpt,int *sign)
將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串
char *gcvt(double value,int ndigit,char *buf)
將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針
char *ultoa(unsigned long value,char *string,int radix)
將無符號整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *ltoa(long value,char *string,int radix)
將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時(shí)所用基數(shù)
char *itoa(int value,char *string,int radix)
將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時(shí)所用基數(shù)
double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個(gè)數(shù),錯(cuò)誤返回0
long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個(gè)數(shù),錯(cuò)誤返回0
double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個(gè)數(shù),
long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),
并返回這個(gè)數(shù),
int toascii(int c) 返回c相應(yīng)的ASCII
int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')
int _tolower(int ch) 返回ch相應(yīng)的小寫字母('a'-'z')
int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')
int _toupper(int ch) 返回ch相應(yīng)的大寫字母('A'-'Z')
診斷函數(shù),所在函數(shù)庫為assert.h、math.h
void assert(int test) 一個(gè)擴(kuò)展成if語句那樣的宏,如果test測試失敗,
就顯示一個(gè)信息并異常終止程序,無返回值
void perror(char *string) 本函數(shù)將顯示最近一次的錯(cuò)誤信息,格式如下:
字符串string:錯(cuò)誤信息
char *strerror(char *str) 本函數(shù)返回最近一次的錯(cuò)誤信息,格式如下:
字符串str:錯(cuò)誤信息
int matherr(struct exception *e)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
double _matherr(_mexcep why,char *fun,double *arg1p,
double *arg2p,double retval)
用戶修改數(shù)學(xué)錯(cuò)誤返回信息函數(shù)(沒有必要使用)
#includemath.h
#include?iomanip.h?
#include?stdlib.h
#include?windows.h
#include?stdio.h
#include?stdlib.h
#include?iostream.h
#include?fstream.h
//---------------------------------------------------------------------------------------
//以下該模塊是完成BMP圖像(彩色圖像是24bit?RGB各8bit)的像素獲取,并存在文件名為xiang_su_zhi.txt中
unsigned?char?*pBmpBuf;//讀入圖像數(shù)據(jù)的指針
int?bmpWidth;//圖像的寬
int?bmpHeight;//圖像的高
RGBQUAD?*pColorTable;//顏色表指針
int?biBitCount;//圖像類型,每像素位數(shù)
//-------------------------------------------------------------------------------------------
//讀圖像的位圖數(shù)據(jù)、寬、高、顏色表及每像素位數(shù)等數(shù)據(jù)進(jìn)內(nèi)存,存放在相應(yīng)的全局變量中
bool?readBmp(char?*bmpName)?
{
FILE?*fp=fopen(bmpName,"rb");//二進(jìn)制讀方式打開指定的圖像文件
if(fp==0)
return?0;
//跳過位圖文件頭結(jié)構(gòu)BITMAPFILEHEADER
fseek(fp,?sizeof(BITMAPFILEHEADER),0);
//定義位圖信息頭結(jié)構(gòu)變量,讀取位圖信息頭進(jìn)內(nèi)存,存放在變量head中
BITMAPINFOHEADER?head;??
fread(head,?sizeof(BITMAPINFOHEADER),?1,fp);?//獲取圖像寬、高、每像素所占位數(shù)等信息
bmpWidth?=?head.biWidth;
bmpHeight?=?head.biHeight;
biBitCount?=?head.biBitCount;//定義變量,計(jì)算圖像每行像素所占的字節(jié)數(shù)(必須是4的倍數(shù))
int?lineByte=(bmpWidth?*?biBitCount/8+3)/4*4;//灰度圖像有顏色表,且顏色表表項(xiàng)為256
if(biBitCount==8)
{
//申請顏色表所需要的空間,讀顏色表進(jìn)內(nèi)存
pColorTable=new?RGBQUAD[256];
fread(pColorTable,sizeof(RGBQUAD),256,fp);
}
//申請位圖數(shù)據(jù)所需要的空間,讀位圖數(shù)據(jù)進(jìn)內(nèi)存
pBmpBuf=new?unsigned?char[lineByte?*?bmpHeight];
fread(pBmpBuf,1,lineByte?*?bmpHeight,fp);
fclose(fp);//關(guān)閉文件
return?1;//讀取文件成功
}
//-----------------------------------------------------------------------------------------
//給定一個(gè)圖像位圖數(shù)據(jù)、寬、高、顏色表指針及每像素所占的位數(shù)等信息,將其寫到指定文件中
bool?saveBmp(char?*bmpName,?unsigned?char?*imgBuf,?int?width,?int?height,?int?biBitCount,?RGBQUAD?*pColorTable)
{
//如果位圖數(shù)據(jù)指針為0,則沒有數(shù)據(jù)傳入,函數(shù)返回
if(!imgBuf)
return?0;
//顏色表大小,以字節(jié)為單位,灰度圖像顏色表為1024字節(jié),彩色圖像顏色表大小為0
int?colorTablesize=0;
if(biBitCount==8)
colorTablesize=1024;
//待存儲(chǔ)圖像數(shù)據(jù)每行字節(jié)數(shù)為4的倍數(shù)
int?lineByte=(width?*?biBitCount/8+3)/4*4;
//以二進(jìn)制寫的方式打開文件
FILE?*fp=fopen(bmpName,"wb");
if(fp==0)
return?0;
//申請位圖文件頭結(jié)構(gòu)變量,填寫文件頭信息
BITMAPFILEHEADER?fileHead;
fileHead.bfType?=?0x4D42;//bmp類型
//bfSize是圖像文件4個(gè)組成部分之和
fileHead.bfSize=?sizeof(BITMAPFILEHEADER)?+?sizeof(BITMAPINFOHEADER)?+?colorTablesize?+?lineByte*height;
fileHead.bfReserved1?=?0;
fileHead.bfReserved2?=?0;
//bfOffBits是圖像文件前3個(gè)部分所需空間之和
fileHead.bfOffBits=54+colorTablesize;
//寫文件頭進(jìn)文件
fwrite(fileHead,?sizeof(BITMAPFILEHEADER),1,?fp);
//申請位圖信息頭結(jié)構(gòu)變量,填寫信息頭信息
BITMAPINFOHEADER?head;?
head.biBitCount=biBitCount;
head.biClrImportant=0;
head.biClrUsed=0;
head.biCompression=0;
head.biHeight=height;
head.biPlanes=1;
head.biSize=40;
head.biSizeImage=lineByte*height;
head.biWidth=width;
head.biXPelsPerMeter=0;
head.biYPelsPerMeter=0;
//寫位圖信息頭進(jìn)內(nèi)存
fwrite(head,?sizeof(BITMAPINFOHEADER),1,?fp);
//如果灰度圖像,有顏色表,寫入文件?
if(biBitCount==8)
fwrite(pColorTable,?sizeof(RGBQUAD),256,?fp);
//寫位圖數(shù)據(jù)進(jìn)文件
fwrite(imgBuf,?height*lineByte,?1,?fp);
//關(guān)閉文件
fclose(fp);
return?1;
}
//----------------------------------------------------------------------------------------
//以下為像素的讀取函數(shù)
void?doIt()
{
//讀入指定BMP文件進(jìn)內(nèi)存
char?readPath[]="nv.BMP";
readBmp(readPath);
//輸出圖像的信息
cout"width="bmpWidth"?height="bmpHeight"?biBitCount="biBitCountendl;
//循環(huán)變量,圖像的坐標(biāo)
//每行字節(jié)數(shù)
int?lineByte=(bmpWidth*biBitCount/8+3)/4*4;
//循環(huán)變量,針對彩色圖像,遍歷每像素的三個(gè)分量
int?m=0,n=0,count_xiang_su=0;
//將圖像左下角1/4部分置成黑色
ofstream?outfile("圖像像素.txt",ios::in|ios::trunc);
if(biBitCount==8)?//對于灰度圖像
{??????????????
//------------------------------------------------------------------------------------
//以下完成圖像的分割成8*8小單元,并把像素值存儲(chǔ)到指定文本中。由于BMP圖像的像素?cái)?shù)據(jù)是從
//左下角:由左往右,由上往下逐行掃描的
int?L1=0;
int?hang=63;
int?lie=0;
//int?L2=0;
//int?fen_ge=8;
for(int?fen_ge_hang=0;fen_ge_hang8;fen_ge_hang++)//64*64矩陣行循環(huán)
{?
for(int?fen_ge_lie=0;fen_ge_lie8;fen_ge_lie++)//64*64列矩陣循環(huán)
{?
//--------------------------------------------
for(L1=hang;L1hang-8;L1--)//8*8矩陣行
{
for(int?L2=lie;L2lie+8;L2++)//8*8矩陣列
{
m=*(pBmpBuf+L1*lineByte+L2);
outfilem"?";
count_xiang_su++;
if(count_xiang_su%8==0)//每8*8矩陣讀入文本文件
{
outfileendl;
}
}
}
//---------------------------------------------
hang=63-fen_ge_hang*8;//64*64矩陣行變換
lie+=8;//64*64矩陣列變換
//該一行(64)由8個(gè)8*8矩陣的行組成
}
hang-=8;//64*64矩陣的列變換
lie=0;//64*64juzhen
}
}
//double?xiang_su[2048];
//ofstream?outfile("xiang_su_zhi.txt",ios::in|ios::trunc);
if(!outfile)
{
cout"open?error!"endl;
exit(1);
}
else?if(biBitCount==24)
{//彩色圖像
for(int?i=0;ibmpHeight;i++)
{
for(int?j=0;jbmpWidth;j++)
{
for(int?k=0;k3;k++)//每像素RGB三個(gè)分量分別置0才變成黑色
{
//*(pBmpBuf+i*lineByte+j*3+k)-=40;
m=*(pBmpBuf+i*lineByte+j*3+k);
outfilem"?";
count_xiang_su++;
if(count_xiang_su%8==0)
{
outfileendl;
}
//n++;
}
n++;
}
}
cout"總的像素個(gè)素為:"nendl;
cout"----------------------------------------------------"endl;
}
//將圖像數(shù)據(jù)存盤
char?writePath[]="nvcpy.BMP";//圖片處理后再存儲(chǔ)
saveBmp(writePath,?pBmpBuf,?bmpWidth,?bmpHeight,?biBitCount,?pColorTable);
//清除緩沖區(qū),pBmpBuf和pColorTable是全局變量,在文件讀入時(shí)申請的空間
delete?[]pBmpBuf;
if(biBitCount==8)
delete?[]pColorTable;
}
void?main()
{
doIt();
}
SetPixel
函數(shù)原型:COLORREF
SetPixel(HDC
hdc,
int
X,
int
Y,
COLORREF
crColor);
參數(shù):
hdc:設(shè)備環(huán)境句柄。
X:指定要設(shè)置的點(diǎn)的X軸坐標(biāo),按邏輯單位表示坐標(biāo)。
Y:指定要設(shè)置的點(diǎn)的Y軸坐標(biāo),按邏輯單位表示坐標(biāo)。
crColor:指定要用來繪制該點(diǎn)的顏色。
頭文件:wingdi.h:
庫文件:gdi32.lib
1、可以變成灰度圖也可以不變。這里假設(shè)你的圖像都是IPL_DEPTH_8U類型。
2、如果變成灰度圖,就是單通道圖像,獲取的就是每一個(gè)像素點(diǎn)的灰度值。
IplImage* img = cvLoadImage("test.bmp", 0);
for (int i = 0; i img-height; i++)
{
for (int j = 0; j img-width; j++)
{
//方法一:使用cvGet2D()函數(shù)間接訪問
CvScalar s = cvGet2D(img, i, j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("gray value=%f\n",s.val[0]);
//方法二:使用直接訪問
uchar val = ((uchar *)(img-imageData + i*img-widthStep))[j]; //i和j的意義同上
printf("gray value=%d\n",val);
}
}
3、如果不變成灰度圖,就是3通道圖像,獲取的就是每一個(gè)像素點(diǎn)的BGR值,然后分別獲取B值,G值和R值。
IplImage* img = cvLoadImage("test.bmp", 1);
for (int i = 0; i img-height; i++)
{
for (int j = 0; j img-width; j++)
{
//方法一:使用cvGet2D()函數(shù)間接訪問
CvScalar s=cvGet2D(img,i,j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //注意是BGR順序
//方法二:使用直接訪問
int bVal = ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 0]; // B
int gVal = ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 1]; // G
int rVal = ((uchar *)(img-imageData + i*img-widthStep))[j*img-nChannels + 2]; // R
printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR順序
}
}