如何";填充“;C+中的图像+; 我正在运行,在没有任何库的情况下,用C++中的RAW显示RGB图像。当我输入正方形图像(例如:512x512)时,我的程序可以完美地显示图像,但在非正方形大小的图像(例如:350x225)中它不能显示。我知道我需要填充这个案例,然后我试着找到同样的案例,但人们如何填充他们的图像对我来说没有意义
如果有人能教我如何使用pad,我将非常感谢。下面是我从Raw为RGB所做的工作如何";填充“;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 {
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++;
}