먼저 IppDibIppImage로 변환하는 함수를 살펴보자. 두 개의 IppDibToImage 함수 정의를 소스 4-16에 나타내었다. 각각의 함수 시작 부분에서는 전달된 dib 객체가 유효한 DIB인지, 그리고 입력 DIB의 색상 수가 적절한지를 먼저 검사한다. 그리고 DIB의 픽셀 데이터를 한 줄씩 참조하여 IppImage의 픽셀 데이터로 복사한다.

    소스 4-16 IppDibToImage 함수 구현(IppConvert.cpp)
    #include "stdafx.h"
    #include <assert.h>
    #include "IppConvert.h"
    
    void IppDibToImage(IppDib& dib, IppByteImage& img)
    {
        assert(dib.IsValid());
        assert(dib.GetBitCount() == 8);
    
        int w = dib.GetWidth();
        int h = dib.GetHeight();
        int ws = (w + 3) & ~3;
        BYTE* pDIBits = dib.GetDIBitsAddr();
    
        img.CreateImage(w, h);
        BYTE** pixels = img.GetPixels2D();
    
        for (int i = 0; i < h; i++)
        {
            memcpy(pixels[i], &pDIBits[(h - 1 - i) * ws], w);
        }
    }
    
    void IppDibToImage(IppDib& dib, IppRgbImage& img)
    {
        assert(dib.IsValid());
        assert(dib.GetBitCount() == 24);
    
        int w = dib.GetWidth();
        int h = dib.GetHeight();
        int ws = (w * 3 + 3) & ~3;
        BYTE* pDIBits = dib.GetDIBitsAddr();
    
        img.CreateImage(w, h);
        RGBBYTE** pixels = img.GetPixels2D();
    
        for (int i = 0; i < h; i++)
        {
            memcpy(pixels[i], &pDIBits[(h - 1 - i) * ws], w * 3);
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.