Ⅰ 如何在VC++6.0中使用C語言簡單的繪圖畫圖功能
用 VC 實現 繪圖相對還是比較容易的.
定義好圖元類, 成員 主要有 位置, 線型,填充類型等; 實現肢鄭山繪圖方法: 調用 CDC 類的 繪圖函數實現繪制;
定義好圖元的存儲管理, 可以用鏈表,或數組;
如果 用 文檔-視圖 框架,在視圖的 OnDraw 方法中, 調用各圖元的繪圖方法, 完成 圖形的顯示;
如果沒用文檔-視圖 框架,則在 窗口的 WM_PAINT事件中,完成繪圖;
4. 設計好交互, 在 WM_LBUTTONDOWN, WM_LBUTTONUP, WM_MOUSEMOVE等事件中, 進行具體實現. 主叢沖要新建 , 改變大小, 拖動等.
這樣基本可以實現 簡單的 繪圖了.
可百歷中度搜索
想用mfc做一個繪圖系統,畫圓直線矩形填充顏色和平移
有我幫網友作的一個例子.
Ⅱ 關於VC++6.0如何實現圖形編程的問題
VC中沒有graphics.h和相應的庫。談亮拿(它多半是TC的東西。)
VC編圖形要用MFC,或Win32。(注意這是含搭兩類不同的工程,建鍵大工程的時候注意)
Ⅲ 在線等 VC++關於載入讀取JPG,PNG,BMP 或者DX 圖像格式的問題
1.很小白的方法,直接改擴展名,自己知道是什麼類型的就好
2.用二進制將圖片寫進文件,使用的時候再從文件中抽取出來,可以旅納定義一個類似於這樣的結構體
struct PICTURE_INFO
{
TCHAR name[50]; //文件名
UINT size; //文件大小
TCHAR *pData; //保存數拆埋沒據的指針
}
或者把圖片做為二進制資源加進exe文件
3.也就是你說的直接對文件進行加密,比如說des演算法,網上都有的
4.其實就算你再怎麼加密,在明白人眼裡都是不安全的,你液指看看那麼多公司的游戲只要登陸pc沒過多久就會被破解就知道了。所以說可以隨便找一種相對簡單的方法就可以了,畢竟放君子不妨小人嘛 :) 。。。。。。
繪圖到窗體上又是另外一個問題了,atl中有個CImage類(#include <atlimage.h>),使用Load函數載入圖片,得到一個HBITMAP句柄,如果是基於對話框的程序,添加個CStatic控制項,設置顯示圖片,然後SetBitmap就能顯示了。
Ⅳ 關於圖形學里中心畫圓演算法的vc++的程序實現~急用~必須能運行得出來結果的!!
測試過了能用,MFC源碼如下
void CTest1View:: roundMid(int x1,int y1,int R,CDC* pDC)
{
int x=0,y=R;
int d=1-R; //起點(0,R),下一點中點蘆逗(1,R-0.5),d=1*1+(R-0.5)*(R-0.5)-R*R=1.25-R,d只參與整數運算,所以小數部分可省略
while(y>x) //y>x即第一象限的第2區八分圓滑鍵
{
pDC->SetPixel(x+x1,y+y1,RGB(255,0,0)); //圓陪讓賣心(x1,y1),畫點時直接相加平移,畫2區
pDC->SetPixel(y+x1,x+y1,RGB(255,0,0)); //畫1區
pDC->SetPixel(-x+x1,y+y1,RGB(255,0,0)); //畫3區
pDC->SetPixel(-y+x1,x+y1,RGB(255,0,0)); //畫4區
pDC->SetPixel(-x+x1,-y+y1,RGB(255,0,0)); //畫5區
pDC->SetPixel(-y+x1,-x+y1,RGB(255,0,0)); //畫6區
pDC->SetPixel(x+x1,-y+y1,RGB(255,0,0)); //畫7區
pDC->SetPixel(y+x1,-x+y1,RGB(255,0,0)); //畫8區
if(d<0)
d=d+2*x+3; //d的變化
else
{
d=d+2*(x-y)+5; //d<=0時,d的變化
y--; //y坐標減1
}
x++; //x坐標加1
}
}
Ⅳ 利用C語言編寫 能夠畫出任意的直線演算法程序(利用畫點函數)
上次剛寫過,在VC下運行的,
int dx,dy,incrE,incrNE,d,x,y;
if ((point[1].x-point[0].x)==0){ //垂直的直線
x=point[0].x;
for(y=point[0].y;y<point[1].y;y++)
pDC->SetPixel(x,y,50);
}
else if(abs((point[1].y-point[0].y)/(point[1].x-point[0].x))<=1){ //斜率 -1到 1 之間
dx=point[1].x-point[0].x;
dy=point[0].y-point[1].y;
d=dx-2*dy;
incrE=-2*dy;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
if(point[0].y>point[1].y){
while(x<point[1].x)
{
if(d>=0){
d+=incrE;
x++;
}
else
{d+=incrNE;
x++;
y--;
}
pDC->SetPixel(x,y,50);
}
}
else if(point[0].y<=point[1].y){
dy=point[1].y-point[0].y;
incrE=-2*dy;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(x<point[1].x)
{
if(d>=0){
d+=incrE;
x++;
}
else
{d+=incrNE;
x++;
y++;
}
pDC->SetPixel(x,y,50);
}
}
}
else { //斜率 <-1 和 >1的直線
if(point[1].x>=point[0].x){
dx=point[1].x-point[0].x;
dy=point[1].y-point[0].y;
d=2*dx-dy;
incrE=2*dx;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(x<point[1].x)
{
if(d<0){
d+=incrE;
y++;
}
else
{d+=incrNE;
pDC->SetPixel(x,y,50);
x++;
y++;
}
pDC->SetPixel(x,y,50);
}
}
else if((point[1].y-point[0].y)/(point[1].x-point[0].x)<-1){
dx=point[1].x-point[0].x;
dy=point[0].y-point[1].y;
d=2*dx-dy;
incrE=2*dx;
incrNE=2*(dx-dy);
x=point[0].x,y=point[0].y;
pDC->SetPixel(x,y,50);
while(y<point[1].y)
{
if(d>0){
d+=incrE;
y++;
}
else
{d+=incrNE;
x--;
y++;
}
pDC->SetPixel(x,y,50);
}
}
}
Ⅵ VC++ 6.0編寫計算機圖形學中的種子填充演算法,想用遞歸的八向連通域,求助!
用八鄰域的話,有重復的圓旁,這個你要脊腔隱考慮到,一般都用四鄰櫻廳域的,八鄰域你可以設置一個標志數組,對於已經處理的點就不管了
Ⅶ 請教vc++高手講解一下下面的圖像處理程序
.旋轉圖像(含對話框 這里對話框需要自己建立) void CCimageProcessingView::OnGeomRota() { //獲取指向文檔的指針 CCimageProcessingDoc* pDoc = GetDocument(); //指向DIB的指針 LPSTR lpDIB; //鎖定DIB lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB()); // 縮放比率兆冊含 int iRotaAngle; // 創建對話框 CDlgGeoRota dlgPara; // 初始化變數值 dlgPara.m_iRotaAngle = 90; /姿李/ 顯示對話框,提示用戶設定旋轉角度 if (dlgPara.DoModal() != IDOK) { // 返回 return; } // 獲取用戶設定的平移量 iRotaAngle = dlgPara.m_iRotaAngle; // 刪除對話框 delete dlgPara; //創建新DIB HDIB hNewDIB=NULL; //設置游標狀態為等待狀態 BeginWaitCursor(); //調用RotateDIB函數旋轉族笑DIB圖象 hNewDIB=(HDIB)::RotateDIB(lpDIB,iRotaAngle); //旋轉成功 if (hNewDIB) { //替換原來的DIB圖象為新的DIB pDoc->ReplaceHDIB(hNewDIB); //更新DIB圖象的大小和調色板 pDoc->InitDIBData(); //設置文檔修改標記 pDoc->SetModifiedFlag(TRUE); //調節滾動視圖大小 SetScrollSizes(MM_TEXT,pDoc->GetDocSize()); //更新所有視圖 pDoc->UpdateAllViews(NULL); } else { //提示信息 MessageBox("實現圖象旋轉失敗!"); } //解除鎖定 ::GlobalUnlock((HGLOBAL) pDoc->GetHDIB()); //結束游標等待狀態 EndWaitCursor(); } /************************************************************************* * * 函數名稱: * * RotateDIB () * * 參數: * * LPSTR lpDIB //指向源DIB圖像指針 * * int iAngle * 說明: * * 該函數用來實現DIB圖像的旋轉。 * ************************************************************************/ HGLOBAL WINAPI RotateDIB(LPSTR lpDIB,int iAngle) { //原圖象寬度 LONG lWidth; //原圖象高度 LONG lHeight; //旋轉後圖象寬度 LONG lNewWidth; //旋轉後圖象高度 LONG lNewHeight; //原圖象的顏色數 WORD wNumColors; //原圖象的信息頭結構指針 LPBITMAPINFOHEADER lpbmi,lpbmi0; //指向原圖象和目的圖象的像素的指針 LPBYTE lpSrc,lpDst; //指向原圖像像素的指針 LPBYTE lpDIBBits; //指向旋轉後圖像(像素)的指針 LPBYTE lpNewDIBBits; LPSTR lpNewDIB; //旋轉後新的DIB句柄 HDIB hDIB;
Ⅷ 關於vc+dx做游戲的問題
BOOL bGotMsg;
while( WM_QUIT != msg.message )
{
bGotMsg = PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE );
if( bGotMsg )
{ // 有消息的處理消息
if( 0 == TranslateAccelerator( hMainWnd, 0, &msg ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
else
{ // 無消息的梁廳配時候處理游戲邏輯和圖形伏擾等。橡指
UpdateGame();
RenderGame();
}
}
Ⅸ 在VC環境下,用directX在窗口中繪圖,切換到桌面然後切換回來,窗口無顯示
剛好最謹鄭近看的一本書上有這個問題
Direct3D有兩個狀亮鉛態工作狀態和丟失狀態
工作狀態是正常狀態 如果程序失去焦點就進入丟失狀態 d3d是渲染設備就會丟失 從而不在渲染圖形 這種情況下 渲染失敗時 所有圖形渲染操作也會返回 運行成功代碼 只有IDirect3DDevice9::Present()介面函數會返回錯誤代碼
D3DERR_DEVICELOST
丟失態的處理
IDirect3DDevice::Reset()是設備丟失後設備對象可以唯一調用的函數 但是如果程序釋放了所有D3DPOOL_DEFAULT資源 Reset()的調用也將失敗
IDirect3DDevice::TestCooperativeLevel()介面函數用來確定設備時候能夠恢復若返回 D3D_OK表示設備敬晌好可以回復
恢復前應該銷毀所有顯存資源 和 所有交換鏈
Ⅹ 如何用C++編directx
首先,檢查一下你自己的C++是不是真的學會了。什麼是介面繼承?指針的強制類型轉換有幾種?指針的指針怎麼用?指針和引用有什麼聯系?const指針和指向const的指針有什麼不同?
其次,你的Windows基本編程(不是MFC,別管MFC,是垃圾)是不是明白了。handle和指針有什麼不一樣?怎樣創建多個窗口?怎樣訪問一個點陣圖裡面的像素?怎樣把一個點陣圖文件顯示在任意顯示模式的窗口中?什麼是CreateDIBSection?
最後,可以學DirectX了。首先就是畫一個平面的綠色三角形。然後畫一個彩色的三角形。然後畫一個帶貼圖的三角形。然後畫一個三維的三角形。然後畫一個三維的帶光照的三角形。那麼基本上就學會了。
剩下了,就是怎樣把光學理論用於畫三維圖形了.....這個就很有意思了。