C ++ 비트 맵 파일 저장

user3865729

그래서 제가하려는 것은 내 프로그램이 스크린 샷을 찍어 컴퓨터에 저장하도록하는 것입니다. 실제로 스크린 샷을 찍는 부분은 나중에 프로그램 할 것이고, 먼저 컴퓨터에 실제로 bmp 파일을 저장하는 문제를 해결하려고합니다. 저에게 도움이 될 다음 코드를 찾았습니다.

// szPathName : Specifies the pathname

// lpBits    : Specifies the bitmap bits

// w    : Specifies the image width

// h    : Specifies the image height

bool SaveImage(char* szPathName, void* lpBits, int w, int h)

{

    //Create a new file for writing

    FILE *pFile = fopen(szPathName, "wb");

    if(pFile == NULL)

    {

        return false;

    }

        BITMAPINFOHEADER BMIH;

        BMIH.biSize = sizeof(BITMAPINFOHEADER);

        BMIH.biSizeImage = w * h * 3;

        // Create the bitmap for this OpenGL context

        BMIH.biSize = sizeof(BITMAPINFOHEADER);

        BMIH.biWidth = w;

        BMIH.biHeight = h;

        BMIH.biPlanes = 1;

        BMIH.biBitCount = 24;

        BMIH.biCompression = BI_RGB;

        BMIH.biSizeImage = w * h* 3;

        BITMAPFILEHEADER bmfh;

        int nBitsOffset = sizeof(BITMAPFILEHEADER) + BMIH.biSize;

        LONG lImageSize = BMIH.biSizeImage;

        LONG lFileSize = nBitsOffset + lImageSize;

        bmfh.bfType = 'B'+('M'<<8);

        bmfh.bfOffBits = nBitsOffset;

        bmfh.bfSize = lFileSize;

        bmfh.bfReserved1 = bmfh.bfReserved2 = 0;

        //Write the bitmap file header

        UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1,

        sizeof(BITMAPFILEHEADER), pFile);

        //And then the bitmap info header

        UINT nWrittenInfoHeaderSize = fwrite(&BMIH,

        1, sizeof(BITMAPINFOHEADER), pFile);

        //Finally, write the image data itself

        //-- the data represents our drawing

        UINT nWrittenDIBDataSize =

        fwrite(lpBits, 1, lImageSize, pFile);

        fclose(pFile);



    return true;

}

그래서 문제는 무엇입니까 .... 나는 varialbe IpBits를 이해하지 못합니다. 코드의 주석 (lpBits : 비트 맵 비트 지정)에 lpBits에 대한 간략한 설명이 있지만 실제로 의미하는 바는 모르겠습니다. fclose는 결국 SaveImage 함수에 전달하는 lpbit를 사용하는 함수이기 때문에 msdn에 들어가 fopen 및 fclose 함수를 살펴 보았습니다. ... 그리고 fclose 함수의 lpBits 변수가 다음에 따라 달라지는 것처럼 보였습니다. fopen 함수에서 전달 된 변수. fopen 함수의 "wb"가 의미하는 바를 찾으려고했지만 실패했습니다 (msdn에서 검색하는 경우도 있음).

질문 : 이전 코드에서 fopen 함수의 두 번째 변수로 "wb"를 사용하는 경우 fclose 함수의 lpBits는 정확히 무엇입니까? 정확히 무엇인지 물어볼 때, 내 말은 ... 어떤 유형의 변수인지 (코드에서 기본적으로 변수가 될 수있는 void *로 배치되어 있음) 그리고 여러분이 줄 수있는 모든 피드백을 평가할 것입니다.

감사합니다!

파올로 브란 돌리

lpBits는 크기가 lImageSize 인 바이트 배열을 나타냅니다.

배열의 각 바이트에는 B, G 및 R의 순서로 단일 색상 구성 요소가 포함됩니다. 각 픽셀은 각 색상 구성 요소에 대해 하나씩 3 바이트를 사용합니다.

게시 한 코드는 각 이미지 행의 4 바이트 정렬을 고려하지 않습니다. 각 이미지의 행은 4 바이트 경계에 정렬되어야하므로 lImageSize의 올바른 공식은 다음과 같습니다.

lImageSize = h * ((w * 3 + 3) & 0xfffffffc);

lpbit는 직접 만들 수 있습니다.

lpbits = new BYTE[lImageSize];

또는 CreateDIBSection()Logicrat의 답변에 명시된대로 사용하여

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Android는 이미지 파일에 비트 맵 저장

분류에서Dev

VB .NET 2010 : 큰 비트 맵을 파일로 저장

분류에서Dev

비트 맵 이미지를 저장하기 위해 60ms마다 c로 파일 생성

분류에서Dev

비트 맵 저장 방법

분류에서Dev

Android 앱에서 비트 맵 이미지를 파일로 변환 / 저장

분류에서Dev

저장하지 않고 비트 맵의 C # 압축 크기

분류에서Dev

Android API의 외부 저장소에 비트 맵 저장 28 결과 0 B 파일

분류에서Dev

준비된 레이아웃을 비트 맵으로 변환하고 파일에 이미지로 저장

분류에서Dev

비트 맵 파일 읽기

분류에서Dev

스트림에 비트 맵 저장

분류에서Dev

스트림에 비트 맵 저장

분류에서Dev

C에서 비트 맵 파일의 픽셀 조작

분류에서Dev

비트 맵을 파일에 저장하면 검은 색 이미지가 생성됩니다.

분류에서Dev

비트 맵을 저장할 수 없음 : ENOENT (해당 파일 또는 디렉토리 없음)

분류에서Dev

저장된 비트 맵로드

분류에서Dev

SlideTabLayout 조각 : 비트 맵 저장

분류에서Dev

jpeg 이미지로 비트 맵 저장

분류에서Dev

비트 맵을 먼저 파일 시스템에 저장하지 않고 메모리 내 비트 맵을 ZipArchive에 저장하려면 어떻게해야합니까?

분류에서Dev

비트 맵 공장 오류

분류에서Dev

원본과 동일한 치수로 비트 맵을 저장하는 방법은 무엇입니까?

분류에서Dev

C-두 비트 맵을 OR하는 가장 빠른 방법

분류에서Dev

저장 파일 C ++를 디코딩하기 위해 문자열 비트 시프트

분류에서Dev

텍스트 파일에 저장된 C # Replay 웹 요청

분류에서Dev

C # DataGridView를 텍스트 파일에 저장

분류에서Dev

텍스트 파일에 TextBox 콘텐츠 저장 C #

분류에서Dev

Int 데이터를 C ++의 텍스트 파일에 저장

분류에서Dev

HTTP 스트림을 C #의 파일에 저장

분류에서Dev

사용자 입력을 텍스트 파일 C ++에 저장

분류에서Dev

문자열 및 부동 데이터가있는 텍스트 파일을 읽고 해시 맵에 저장

Related 관련 기사

  1. 1

    Android는 이미지 파일에 비트 맵 저장

  2. 2

    VB .NET 2010 : 큰 비트 맵을 파일로 저장

  3. 3

    비트 맵 이미지를 저장하기 위해 60ms마다 c로 파일 생성

  4. 4

    비트 맵 저장 방법

  5. 5

    Android 앱에서 비트 맵 이미지를 파일로 변환 / 저장

  6. 6

    저장하지 않고 비트 맵의 C # 압축 크기

  7. 7

    Android API의 외부 저장소에 비트 맵 저장 28 결과 0 B 파일

  8. 8

    준비된 레이아웃을 비트 맵으로 변환하고 파일에 이미지로 저장

  9. 9

    비트 맵 파일 읽기

  10. 10

    스트림에 비트 맵 저장

  11. 11

    스트림에 비트 맵 저장

  12. 12

    C에서 비트 맵 파일의 픽셀 조작

  13. 13

    비트 맵을 파일에 저장하면 검은 색 이미지가 생성됩니다.

  14. 14

    비트 맵을 저장할 수 없음 : ENOENT (해당 파일 또는 디렉토리 없음)

  15. 15

    저장된 비트 맵로드

  16. 16

    SlideTabLayout 조각 : 비트 맵 저장

  17. 17

    jpeg 이미지로 비트 맵 저장

  18. 18

    비트 맵을 먼저 파일 시스템에 저장하지 않고 메모리 내 비트 맵을 ZipArchive에 저장하려면 어떻게해야합니까?

  19. 19

    비트 맵 공장 오류

  20. 20

    원본과 동일한 치수로 비트 맵을 저장하는 방법은 무엇입니까?

  21. 21

    C-두 비트 맵을 OR하는 가장 빠른 방법

  22. 22

    저장 파일 C ++를 디코딩하기 위해 문자열 비트 시프트

  23. 23

    텍스트 파일에 저장된 C # Replay 웹 요청

  24. 24

    C # DataGridView를 텍스트 파일에 저장

  25. 25

    텍스트 파일에 TextBox 콘텐츠 저장 C #

  26. 26

    Int 데이터를 C ++의 텍스트 파일에 저장

  27. 27

    HTTP 스트림을 C #의 파일에 저장

  28. 28

    사용자 입력을 텍스트 파일 C ++에 저장

  29. 29

    문자열 및 부동 데이터가있는 텍스트 파일을 읽고 해시 맵에 저장

뜨겁다태그

보관