중화사전망 - 구한말 사전 - MATLAB의 imshow() 또는 imagec()와 유사한 기능을 달성하기 위해 MFC에서 2차원 배열을 회색조로 직접 표시하는 방법은 무엇입니까?

MATLAB의 imshow() 또는 imagec()와 유사한 기능을 달성하기 위해 MFC에서 2차원 배열을 회색조로 직접 표시하는 방법은 무엇입니까?

MFC에서는 CDC 클래스의 BitBlt() 함수를 사용하여 2차원 배열을 회색조 이미지로 직접 표시할 수 있습니다. 구체적인 단계는 다음과 같습니다:

1. 회색조 이미지 데이터를 저장할 DIB(장치 독립적 비트맵) 개체를 만듭니다.

2. 2차원 배열의 각 요소를 스캔하여 해당 색상 값으로 변환합니다. 8비트 회색조 이미지의 경우 각 픽셀의 색상 값 범위는 0~255입니다.

3. DIB 객체에 색상 값을 쓰고 이미지의 너비와 높이를 설정합니다.

4. CDC 클래스의 BitBlt() 함수를 사용하여 DIB 개체의 이미지 데이터를 캔버스나 창과 같은 지정된 장치에 표시합니다.

다음은 샘플 코드입니다:

```c++

// 입력 2차원 배열이 greyData이고 너비가 너비이고 높이를 높이로

p>

int width = 320;

int height = 240;

BYTE* greyData = new BYTE[width * height] ;

// DIB 객체 생성

BITMAPINFO bmi;

ZeroMemory(&bmi, sizeof(BITMAPINFO));

bmi.bmiHeader .biSize = sizeof(BITMAPINFOHEADER);

p>

bmi.bmiHeader.biWidth = width;

bmi.bmiHeader.biHeight = -height; // 음수는 하향식을 의미합니다.

bmi.bmiHeader.biPlanes = 1 ;

bmi.bmiHeader.biBitCount = 8;

bmi.bmiHeader.biCompression = BI_RGB;

bmi.bmiHeader.biSizeImage = width * height;

p>

HDC hdc = GetDC(hWnd); // hWnd는 창 핸들입니다.

HBITMAP hBitmap = CreateDIBSection( hdc, &bmi, DIB_RGB_COLORS, (void**)&grayData, NULL, 0);

// 2차원 배열을 회색조 데이터로 변환

for (int y = 0; y < height; y++) {

for (int x = 0; x < width; x++) {

BYTE greyValue = ...; 입력 2차원 배열

greyData[y * width + x ] = greyValue;

}

}

// 표시 회색조 이미지

CDC* pDC = CDC::FromHandle(hdc );

CDC memDC;

memDC.CreateCompatibleDC(pDC);

CBitmap bmp;

bmp.Attach(hBitmap);

CBitmap* pOldBmp = memDC.SelectObject(&bmp);

pDC->BitBlt(0 , 0, 너비, 높이, &memDC, 0, 0, SRCCOPY);

memDC.SelectObject(pOldBmp);

```

이런 식으로 , 2차원 배열을 MFC에서 회색조 이미지로 직접 표시할 수 있습니다.