HBITMAP에서 특정 픽셀의 RGB 값 가져 오기

아담 린드버그

HBITMAP에서 하나의 특정 픽셀 RGB 값을 얻는 방법은 무엇입니까? StackOverflow에서 비슷한 게시물을 읽으려고 시도했지만이 문제에 맞는 것은 없습니다. 아래 코드는 HBITMAP의 다른 위치 (원하는 위치가 아님)에 대한 RGB 값을 얻는 것 같습니다.

    int width = rc.right - rc.left;
    int height = rc.bottom - rc.top;

    HDC hdcSource = hdc; // the source device context
    HBITMAP hSource = hbmp; // the bitmap selected into the device context

    BITMAPINFO MyBMInfo = {0};
    MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader);

    // Get the BITMAPINFO structure from the bitmap
    if(0 == GetDIBits(hdcSource, hSource, 0, 0, NULL, &MyBMInfo, DIB_RGB_COLORS))
    {
        // error handling
    }

    // create the pixel buffer
    BYTE* Pixels = new BYTE[MyBMInfo.bmiHeader.biSizeImage];

    // We'll change the received BITMAPINFOHEADER to request the data in a
    // 32 bit RGB format (and not upside-down) so that we can iterate over
    // the pixels easily. 

    // requesting a 32 bit image means that no stride/padding will be necessary,
    // although it always contains an (possibly unused) alpha channel
    MyBMInfo.bmiHeader.biBitCount = 32;
    MyBMInfo.bmiHeader.biCompression = BI_RGB;  // no compression -> easier to use
    // correct the bottom-up ordering of lines (abs is in cstdblib and stdlib.h)
    MyBMInfo.bmiHeader.biHeight = abs(MyBMInfo.bmiHeader.biHeight);

    // Call GetDIBits a second time, this time to (format and) store the actual
    // bitmap data (the "pixels") in the buffer lpPixels
    if(0 == GetDIBits(hdcSource, hSource, 0, MyBMInfo.bmiHeader.biHeight,
                      Pixels, &MyBMInfo, DIB_RGB_COLORS))
    {
        // error handling
    }

    int PixelX = 221;
    int PixelY = 14;

    cout << "R: " << (int)Pixels[4*((PixelX-1)+(PixelY-1)*width)] << " | G: " << (int)Pixels[4*((PixelX-1)+(PixelY-1)*width)+1] << " | B: " << (int)Pixels[4*((PixelX-1)+(PixelY-1)*width)+2] << endl;

편집 (user1118321의 솔루션 사용)

y는 1이 아닌 0에서 시작하기 때문입니다.

cout << "R: " << (int)Pixels[4*((PixelX)+(height-1-(PixelY))*width)] << " | G: " << (int)Pixels[4*((PixelX)+(height-1-(PixelY))*width)+1] << " | B: " << (int)Pixels[4*((PixelX)+(height-1-(PixelY))*width)+2] << endl;
user1118321

Windows 비트 맵은 왼쪽 아래에서 시작하여 Y가 위쪽으로 증가하면서 픽셀을 저장합니다. ((height - 1) - PixelY)대신 사용 시도 PixelY하고 도움이되는지 확인하십시오.

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

픽셀의 HEX에서 rgb 값 (0..255) 가져 오기

Java 아이콘에서 픽셀의 RGB 값 가져오기

Python으로 화면 픽셀에서 RGB 값 가져 오기

openCV에서 특정 이미지의 픽셀 RGB 값 설정

stb_image에서 픽셀의 RGB 가져 오기

BufferedImage를 사용하여 Java의 RGB 색상 공간에서 그레이 스케일 픽셀 값 가져 오기

C # 및 Kinect v2 : 깊이 픽셀에 맞는 RGB 값 가져 오기

jquery를 사용하여 특정 열의 특정 셀에서 값 가져 오기

Python PIL로 특정 색상의 픽셀 x, y 값 가져 오기

DataGrid에서 특정 행 및 특정 열의 값 가져 오기

Swift의 CVPixelBufferRef에서 픽셀 값 가져 오기

Python에서 특정 색상의 픽셀에 다른 RGB 값 제공

MATLAB에서 PixelList를 사용하여 RGB 이미지에서 픽셀 값 가져오기

PHP 연관 배열에서 특정 셀 값 가져오기

창에서 지정된 픽셀의 색상 가져 오기

PHP의 URL에서 특정 가져 오기 값 건너 뛰기

Laravel / Cyber-duck Excel에서 Excel 파일의 특정 셀 값 가져 오기

XML 문서의 특정 태그에서 값 가져 오기

xml에서 특정 값 가져 오기

Firebase에서 특정 값 가져 오기

XSLT에서 특정 값 가져 오기

JSONarray에서 특정 값 가져 오기

XML에서 특정 값 가져오기

C++에서 파일의 특정 줄에서 특정 값 가져오기

특정 위치의 문자열에서 값 가져 오기

Python: json에서 특정 키의 모든 값 가져오기

mongoDB에서 특정 키의 모든 값 가져 오기

PHP 배열에서 특정 값의 개수 가져 오기

특정 위치의 수직선에서 값 가져 오기

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관