2017-01-26 3 views
-1

。私はいくつかのグラフィカルな出力が必要な小さなプロジェクトがあったので、windows.hを数時間使って遊んできました。私は自分の興味を持った数学の話題のYouTubeビデオを見たので、私は自分自身で(少なくともその一部)それをやった。だから問題は:windows.hヘッダーファイル、setpixel()関数のプロプライズのアプローチ

ピクセルサイズを設定できるwindows.hの関数はありますか?私はそれを正しく見れば、私の出力がより良く見えるという事実のため、ピクセル化されたイメージを持っていきたいと思います。

あなたがそれを見たいのであれば私のコード、プロジェクトについてはいくつかのスクリーンショットがあります。 (写真:https://1drv.ms/f/s!AvMH4xlC_LqCmyAvmyOWUsIqFHAV

#include <iostream> 
#include <fstream> 
/// ezek kellenek a grafikához! 
#define _WIN32_WINNT 0x0500 
#include<windows.h> 
#include <cmath> 

#define N 1000 
#define S 2000000 
#define gridMAX 4 

using namespace std; 

void toeple(int** grid); 

int main() 
{ 
    int **grid = new int*[N]; 

    for(int i=0;i<N;i++){ 
     grid[i] = new int[N]; 
    } 

    for(int i=0;i<N;i++){ 
     for(int j=0;j<N;j++){ 
      grid[i][j] = 0; 
     } 
    } 
    grid[N/2][N/2] = S; 

    toeple(grid); 

    ofstream fout("grid.txt"); 

    fout << N-2 << endl; 

    for(int i=1;i<N-1;i++){ 
     for(int j=1;j<N-1;j++){ 
      fout << grid[i][j] << " "; 
     } 
     fout << endl; 
    } 

    fout.close(); 

    for(int i=0;i<N;i++){ 
     delete [] grid[i]; 
    } 
    delete [] grid; 

    ifstream fin("grid.txt"); 

    int meret; 

    fin >> meret; 

    int **newgrid = new int*[meret]; 

    for(int i=0;i<meret;i++){ 
     newgrid[i] = new int[meret]; 
    } 

    string sor; 

    while(!fin.eof()){ 
     for(int i=0;i<meret;i++){ 
      for(int j=0;j<meret;j++){ 
       fin >> newgrid[i][j]; 
      } 
     } 
    } 

    fin.close(); 

    /// most rajzolunk! 

    HWND myconsole = GetConsoleWindow(); 

    HDC mydc = GetDC(myconsole); 

    COLORREF black = RGB(0,0,0), red = RGB(255,0,0), green =    RGB(0,255,0), blue = RGB(0,0,255) , zero = RGB(229, 255, 0); 

    for(int i=0;i<meret;i++){ 
     for(int j=0;j<meret;j++){ 
      if(newgrid[i][j] == 0){ 
       SetPixel(mydc, 10+i,10+j, zero); 
      }else if(newgrid[i][j] == 1){ 
       SetPixel(mydc, 10+i,10+j, red); 
      }else if(newgrid[i][j] == 2){ 
       SetPixel(mydc, 10+i,10+j, green); 
      }else if(newgrid[i][j] == 3){ 
       SetPixel(mydc, 10+i,10+j, blue); 
      }else{ 
       SetPixel(mydc,10+i,10+j, black); 
      } 
     } 
    } 

    ReleaseDC(myconsole, mydc); 

    cin.ignore(); 

    for(int i=0;i<N;i++){ 
     delete [] newgrid[i]; 
    } 
    delete [] newgrid; 

    return 0; 
} 

void toeple(int** grid){ 
    bool ready = false; 
    do{ 
     ready = true; 
     for(int i=1;i<N-1;i++){ 
      for(int j=1;j<N-1;j++){ 
       if(grid[i][j]>=gridMAX){ 
        ready = false; 
        while(grid[i][j]>=gridMAX){ 
         grid[i+1][j]++; 
         grid[i-1][j]++; 
         grid[i][j+1]++; 
         grid[i][j-1]++; 
         grid[i][j]-=gridMAX; 
        } 
       } 
      } 
     } 
    }while(!ready); 
} 
+0

うわー、あなたは真剣にコンソールウィンドウのドローコンテキストに画像を描画していますか?それはかなり狂っている。とにかく、ピクセルを拡大するための私の標準的なアプローチは、長方形を使用して線形変換です。たとえば、ピクセルではなく10x10ピクセルの長方形などを描画します。あなたが必要とするのは、あなたが使用するすべての座標に10を掛けることだけです。 –

+0

Yeez。私は馬鹿だと感じる。 :Dこれはとても簡単です。私はこのようなことをしようとしていましたが、私はそれを最も複雑な方法で違った方法で確実にアプローチしたいと思っていました。ありがとう。私はすぐに新しい写真でリンクを更新します。 – Qbeer666

答えて

-1

あなたはGDIがSetWorldTransform、SetMapModeおよび関連機能との座標系を変更することができます。

Coordinate Spaces and Transformations

は、私は\ズームアウト機能でズームを実装するためにこれらの年前に使用しました。

P.S.注釈では、SetPixelの代わりにSetPixelVを使用すると、速度が少し向上することがあります。

SetPixelV function

関連する問題