如何";填充“;C+中的图像+; 我正在运行,在没有任何库的情况下,用C++中的RAW显示RGB图像。当我输入正方形图像(例如:512x512)时,我的程序可以完美地显示图像,但在非正方形大小的图像(例如:350x225)中它不能显示。我知道我需要填充这个案例,然后我试着找到同样的案例,但人们如何填充他们的图像对我来说没有意义

如何";填充“;C+中的图像+; 我正在运行,在没有任何库的情况下,用C++中的RAW显示RGB图像。当我输入正方形图像(例如:512x512)时,我的程序可以完美地显示图像,但在非正方形大小的图像(例如:350x225)中它不能显示。我知道我需要填充这个案例,然后我试着找到同样的案例,但人们如何填充他们的图像对我来说没有意义,c++,image-processing,mfc,mdi,C++,Image Processing,Mfc,Mdi,如果有人能教我如何使用pad,我将非常感谢。下面是我从Raw为RGB所做的工作 void CImage_MyClass::Class_MakeRGB(void) { m_BMPheader.biHeight = m_uiHeight; m_BMPheader.biWidth = m_uiWidth; m_pcBMP = new UCHAR[m_uiHeight * m_uiWidth * 3]; //RGB Image {

如果有人能教我如何使用pad,我将非常感谢。下面是我从Raw为RGB所做的工作

void CImage_MyClass::Class_MakeRGB(void)
{

        m_BMPheader.biHeight = m_uiHeight;
        m_BMPheader.biWidth  = m_uiWidth;
        m_pcBMP = new UCHAR[m_uiHeight * m_uiWidth * 3];

    //RGB Image
    {
        int ind = 0;
        for (UINT y = 0; y < m_uiHeight; y++)
        {
            for (UINT x = 0; x < m_uiHeight*3; x+=3)
            {
                m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x+2];
                m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x+1];
                m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x];
            }
        }
    }

}
void CImage\u MyClass::Class\u MakeRGB(void)
{
m_BMPheader.biHeight=m_uiHeight;
m_BMPheader.biWidth=m_uiWidth;
m_pcBMP=新UCHAR[m_uiHeight*m_uiWidth*3];
//RGB图像
{
int ind=0;
对于(UINT y=0;y
您需要将每行中的字节数填充为4的倍数

void CImage_MyClass::Class_MakeRGB(void)
{
    m_BMPheader.biHeight = m_uiHeight;
    m_BMPheader.biWidth = m_uiWidth;
    //Pad buffer width to next highest multiple of 4
    const int bmStride = m_uiWidth * 3 + 3 & ~3;
    m_pcBMP = new UCHAR[m_uiHeight * bmStride];
    //Clear buffer so the padding bytes are 0
    memset(m_pcBMP, 0, m_uiHeight * bmStride);

    //RGB Image
    {
        for(UINT y = 0; y < m_uiHeight; y++)
        {
            for(UINT x = 0; x < m_uiWidth * 3; x += 3)
            {
                const int bmpPos = y * bmWidth + x;
                m_pcBMP[bmpPos + 0] = m_pcIBuff[m_uiHeight - y - 1][x + 2];
                m_pcBMP[bmpPos + 1] = m_pcIBuff[m_uiHeight - y - 1][x + 1];
                m_pcBMP[bmpPos + 2] = m_pcIBuff[m_uiHeight - y - 1][x];
            }
        }
    }
}
void CImage\u MyClass::Class\u MakeRGB(void)
{
m_BMPheader.biHeight=m_uiHeight;
m_BMPheader.biWidth=m_uiWidth;
//焊盘缓冲区宽度为4的下一个最高倍数
常量int bmStride=m_uiWidth*3+3&~3;
m_pcBMP=新的UCHAR[m_uiHeight*bmStride];
//清除缓冲区,使填充字节为0
memset(m_pcBMP,0,m_uiHeight*bmStride);
//RGB图像
{
对于(UINT y=0;y

我还将内部for循环更改为使用
m_uiWidth
而不是
m_uiHeight

@退休忍者,谢谢你的回答。。。你给了我一个简单的方法。。。 但是顺便说一句,我也用不同的方法修复了我的。。这是:

void CImage\u MyClass::Class\u MakeRGB(void) {

m_BMPheader.biHeight=m_uiHeight;
m_BMPheader.biWidth=m_uiWidth;
int padding=0;
int扫描线=m_uiWidth*3;
而((扫描线+填充)%4!=0)
{
填充++;
}
int psw=扫描线+填充;
m_pcBMP=新UCHAR[m_uiHeight*m_uiWidth*3+m_uiHeight*填充];
//RGB图像
int ind=0;
对于(UINT y=0;y

}

如果我对您的问题理解正确,您实际上是在尝试将可变大小的图像放入固定大小的UI中。是吗?你能看看我的节目吗?我需要同样的建议和建议。我会发邮件给你,问你一些问题。我可以吗。。?谢谢
    m_BMPheader.biHeight = m_uiHeight;
    m_BMPheader.biWidth  = m_uiWidth;

    int padding = 0;

    int scanline = m_uiWidth * 3;

while ( ( scanline + padding ) % 4 != 0 )
{
    padding++;
}

int psw = scanline + padding;

m_pcBMP = new UCHAR[m_uiHeight * m_uiWidth * 3 + m_uiHeight * padding];

//RGB Image
    int ind = 0;
    for (UINT y = 0; y < m_uiHeight; y++)
    {
        for (UINT x = 0; x < m_uiHeight*3; x+=3)
        {
            m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x+2];
            m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x+1];
            m_pcBMP[ind++] = m_pcIBuff[m_uiHeight - y -1][x];
        }
        for(int i = 0; i < padding; i++)

        ind++;
    }