是處理2色值問題的程序嗎?
成都創(chuàng)新互聯(lián)專注于臨海企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),成都商城網(wǎng)站開發(fā)。臨海網(wǎng)站建設(shè)公司,為臨海等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
我也有和你一樣的苦衷啊。。。。。。。
呵呵。。
c語言調(diào)用圖片函數(shù)
據(jù)我所知Matlab有,imshow(),c好象沒有,c只能先將圖片讀到內(nèi)存中,經(jīng)過相關(guān)處理后以一定的格式保存到硬盤中,然后再打開圖片.
讀圖和存圖需要有專門的函數(shù),這些可以參考:
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語言不自帶圖形處理方面的東西。TC特有的頭文件graphics.h,其他編譯環(huán)境都用不了,可移植性是零。而且TC實在太老,與現(xiàn)在c語言標(biāo)準(zhǔn)差距非常大?;臼菬o法運(yùn)行現(xiàn)在的代碼。所以不太建議你用它。
非要用純c,可以自己寫函數(shù)調(diào)用Windows?AP和GUI接口。而且需要包含windows.h頭文件。
網(wǎng)上有個大神用c—free寫的代碼在附件里。
/*
純C通過?Windows?API?編寫的基本?Windows?圖形界面
整理加原創(chuàng),基本上每一句代碼都有注釋
通過?C-Free?3.5編譯
*/
#include?string.h?????????//這個頭文件在擴(kuò)展名為.c時是不需要加的
#include?windows.h????????//windows?api必須包含的頭文件
LRESULT?CALLBACK?WndProc(HWND,UINT,WPARAM,LPARAM);??????//窗口函數(shù)的前向聲明
//參數(shù)說明:
//HINSTANCE?hInstance???當(dāng)前實例句柄
//HINSTANCE?hPrevInstance???以前版本的遺留產(chǎn)物,現(xiàn)在總是置為?NULL
//LPSTR?lpCmdLine???????命令行的產(chǎn)生,可以從開始-獲得程序運(yùn)行的參數(shù),由此傳入
//int?nCmdShow??????程序最初的顯示模式,正常,最大化或最小化
//主函數(shù)的入口是WinMain,?類型為int
//WINAPI標(biāo)志是一種特定的調(diào)用,?它定義了一種生成機(jī)器代碼和放置函數(shù)參數(shù)的方式
int?WINAPI?WinMain(HINSTANCE?hInstance,HINSTANCE?hPrevInstance,LPSTR?lpcmdLine,int?nCmdShow)
{
//TCHAR,?TEXT都是統(tǒng)一單字節(jié)和雙字節(jié)字符的類型,?建議使用
static?TCHAR?szAppName[]?=?TEXT("MyFirstWindows");
static?TCHAR?szClassName[]?=?TEXT("MFWClass");
HWND?hwnd;???????//一定一個窗口句柄
MSG?msg;????????//定義一個消息結(jié)構(gòu)體
WNDCLASS?wndclass;??????//定義一個?WNDCLASS?結(jié)構(gòu)用于注冊窗口
wndclass.style?=?CS_HREDRAW?|?CS_VREDRAW;???????//窗口類的類風(fēng)格,每當(dāng)水平和垂直大小改變時完全刷新窗口
wndclass.lpfnWndProc?=?WndProc;?????//此窗口類所使用的窗口函數(shù)的入口地址
wndclass.cbClsExtra?=?0;????????//用于在類結(jié)構(gòu)中預(yù)留一些額外的空間
wndclass.cbWndExtra?=?0;????????//用于在windows內(nèi)部保存的窗口結(jié)構(gòu)中預(yù)留一些額外的空間
wndclass.hInstance?=?hInstance;?????//指定所在程序的實例句柄
wndclass.hIcon?=?LoadIcon(NULL,IDI_APPLICATION);????????//定制圖標(biāo)
wndclass.hCursor?=?LoadCursor(NULL,IDC_ARROW);??????//定制鼠標(biāo)圖形
wndclass.hbrBackground?=?(HBRUSH)GetStockObject(GRAY_BRUSH);????????//定義背景顏色
wndclass.lpszMenuName?=?NULL;???????//指定窗口類的菜單
wndclass.lpszClassName?=szClassName;????????//指定窗口類的類名
//注冊窗口,參數(shù)為指向?WNDCLASS?結(jié)構(gòu)的指針
//如果注冊不成功,則彈出一個對話框說明情況
//MessageBox是僅有的可以在舊版本和新版本windows都可以運(yùn)行的對話框
if(!RegisterClass(wndclass))
{
MessageBox(NULL,TEXT("This?program?requires?Windows?NT?or?above!"),szAppName,MB_ICONERROR);
return?0;
}
//創(chuàng)建窗口
hwnd?=?CreateWindow(
szClassName,????????//窗口類的名稱
TEXT("Title:My?First?Windows?Program.?這里是標(biāo)題"),?????//窗口標(biāo)題
//WS_OVERLAPPEDWINDOW,???//窗口顯示風(fēng)格,這行實際是一個預(yù)定義,相當(dāng)于下面的集合,可以單獨(dú)設(shè)置
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,??????//程序?qū)嵗浔?/p>
NULL????);??????//創(chuàng)建參數(shù)
//顯示窗口,第一個參數(shù)?hwnd?是?CreateWindow?所創(chuàng)建的窗口的句柄
//第二個參數(shù)?nCmdShow?是主函數(shù)給的,由快捷方式獲得
ShowWindow(hwnd,nCmdShow);
//刷新窗口,給窗口函數(shù),在本程序中即?WndProc?發(fā)送一個?WM_PAINT
UpdateWindow(hwnd);
//消息循環(huán)
while(GetMessage(msg,NULL,0,0))????????//接受自己創(chuàng)建的所有窗口的所有消息
{
TranslateMessage(msg);?????//將?msg?結(jié)構(gòu)體傳給windows以進(jìn)行一些鍵盤轉(zhuǎn)換,?即將擊鍵消息轉(zhuǎn)換為字符消息
DispatchMessage(msg);??????//再次將?msg?結(jié)構(gòu)體傳給windows,由windows將該消息發(fā)送給適當(dāng)?shù)拇翱诤瘮?shù)
}
return?(int)msg.wParam;
}
//窗口函數(shù)
//參數(shù)說明:
//HWND?hwnd,?接受消息的窗口句柄,由CreateWindow函數(shù)返回
//UINT?message,?消息標(biāo)志符,用以標(biāo)識消息,每個消息均有一個唯一對應(yīng)的消息標(biāo)識符
//WPARAM?wParam,?是?WORD?PARAM?的意思,一個32位的消息參數(shù),其含義和數(shù)值根據(jù)消息的不同而不同
//LPARAM?lParam,?是?LONG?PARAM?的意思,一個32位的消息參數(shù),其值和消息有關(guān)
//CALLBACK函數(shù)指由程序員定義,編程實現(xiàn),而由windows系統(tǒng)調(diào)用的函數(shù)
LRESULT?CALLBACK?WndProc(HWND?hwnd,UINT?message,WPARAM?wParam,LPARAM?lParam)
{
HDC?hdc;????????//定義一個設(shè)備描述表句柄結(jié)構(gòu)體
//定義一個?PAINTSTRUCT?的繪制信息結(jié)構(gòu)體,
//其包含了包含了當(dāng)前無效矩形區(qū)域的坐標(biāo)和其他信息,用于刷新用戶區(qū)的內(nèi)容
PAINTSTRUCT?ps;
RECT?rect;??????//定義一個?RECT?結(jié)構(gòu)體,其有l(wèi)eft,top,right,bottom?四個域
//處理傳進(jìn)的各種消息
switch(message)
{
//窗口創(chuàng)建
case?WM_CREATE:?MessageBox(NULL,"MessageContent?:?This?is?WM_CREATE,這是?WM_CREATE。",
"MessageTiTle?這是對話框的標(biāo)題",MB_OK);
return?0;
//窗口繪制
case?WM_PAINT:??hdc?=?BeginPaint(hwnd,ps);?????//由BeginPaint開始,返回設(shè)備描述表以開始繪圖
GetClientRect(hwnd,rect);??????//獲取用戶區(qū)域的大小
//格式話文本輸出
DrawText(hdc,TEXT("WindowsContent?:?I?am?a?developer.?我為計算機(jī)而生。"),
-1,rect,DT_SINGLELINE?|?DT_CENTER?|?DT_VCENTER);
EndPaint(hwnd,ps);?????//以EndPaint結(jié)束,釋放設(shè)備描述表句柄
return?0;
//窗口消亡
case?WM_DESTROY:?MessageBox(NULL,"MessageContent?:?This?is?WM_DESTROY,這是?WM_DESTROY。",
"MessageTiTle?這是對話框的標(biāo)題",MB_OK);
PostQuitMessage(0);
return?0;
}
//凡是窗口函數(shù)不予處理的消息應(yīng)交由windows默認(rèn)消息處理函數(shù)DefWindowProc處理
return?DefWindowProc(hwnd,message,wParam,lParam);
}
1.圖像平移
圖像平移只是改變圖像在屏幕上的位置,圖像本身并不發(fā)生變化。
假設(shè)原圖像區(qū)域左上角坐標(biāo)為(x0,y0),右下角坐標(biāo)為(x1,y1),將圖像分別沿x和y軸平移dx和dy,則新圖像的左上角坐標(biāo)為(x0+dx,y0+dy),右下角坐標(biāo)為(x1+dx,y1+dy)。
在屏幕上實現(xiàn)圖像的移動分為四個步驟:
⑴保存原圖像到緩沖區(qū)。
⑵擦除原圖像。
⑶計算平移后的新坐標(biāo)。
⑷在新的坐標(biāo)位置重新顯示原圖像。
2.圖像顛倒
圖像顛倒是指把定義好的圖像區(qū)域上下翻轉(zhuǎn)地顯示在屏幕上。分析圖像顛倒的過程,可發(fā)現(xiàn)每行的圖像信息都保持不變,而只是改變了行的順序,將第一行與最后的第n行相互交換,第二行與第n-1行交換,依此類推,從而實現(xiàn)了圖像的顛倒。只需采用按行交換的方式,即可方便地修改緩沖區(qū)內(nèi)容,實現(xiàn)圖像的顛倒。
3.圖像鏡像變換
鏡像變換是指將指定區(qū)域的圖像左右翻轉(zhuǎn)地顯示在屏幕。分析鏡像變換過程可以發(fā)現(xiàn):每行圖像信息的處理方式是相同的,而且行順序不發(fā)生變化,只是每一行的像素信息按從左到右的順序進(jìn)行了左右顛倒,從而實現(xiàn)了鏡像變換。因此,采用按行逐點(diǎn)變換的方式實現(xiàn)圖像的鏡像。
4.圖像旋轉(zhuǎn)
圖像旋轉(zhuǎn)是指把定義的圖像繞某一點(diǎn)以逆時針或順時針方向旋轉(zhuǎn)一定的角度,南邵電腦培訓(xùn)認(rèn)為通常是指繞圖像的中心以逆時針方向旋轉(zhuǎn)。