关于赋值指针的问题!

lalafunny 2008-04-23 11:53:17
这是我写的最近邻插值算法但是结果显示图像是全黑,可能是我的指针有问题,但是我是菜鸟,也不会改,那位大侠帮我看下?
其中,m_Img和refimg是两个CxImage类对象,分别代表源图像和放大两倍后的图像

m_Img.LoadResource(FindResource(NULL,MAKEINTRESOURCE(IDC_pic1),
"JPG"),CXIMAGE_FORMAT_JPG);
LPBYTE p_data1;
LPBYTE p_data2;
p_data1 = m_Img.GetBits(0);

long wide,newwide,height,newheight;

wide = m_Img.GetWidth();
height = m_Img.GetHeight();

newwide = 2 * wide;
newheight = 2 * height;

refimg.Create(newwide,newheight,8,0);
p_data2 = refimg.GetBits(0);

long i,j; //新图像坐标
long i0,j0; //源图像坐标


LPBYTE lpSrc,lpDst;

for (j=0;j<height-1;j++)
{
for(i=0;i<wide-1;i++)
{
lpDst = (LPBYTE)p_data2+newwide*j+i;
i0=(int)(i/2+0.5);
j0=(int)(j/2+0.5);
if( (i0 >= 0) && (i0 < wide) && (j0 >= 0) && (j0 < height))
{
lpSrc=(LPBYTE)p_data1 + wide * j0 + i0;
*lpDst=*lpSrc;
}
}
}
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lalafunny 2008-04-24
  • 打赏
  • 举报
回复
是j <newheight
i <newwide,我写错了;

我不太会写,这个程序我是仿照例子写的,但是关于CxImage类的操作我就不会了,所以也不知道错在哪

我不会些临时程序跟踪耶,怎么办?
laoma_hbu 2008-04-24
  • 打赏
  • 举报
回复
for (j=0;j <height-1;j++)
{
for(i=0;i <wide-1;i++)
-----------------------------
这个循环控件条件有问题吧,应该是j<newheight
i<newwide吧?
laoma_hbu 2008-04-24
  • 打赏
  • 举报
回复
自己跟踪一下吧,首先确认你打开的图像正确(打开以后可以写一个临时文件观察),再确认新建的图像正确,最后看指针赋值
lalafunny 2008-04-24
  • 打赏
  • 举报
回复
这下对了,谢谢你
laoma_hbu 2008-04-24
  • 打赏
  • 举报
回复
你新建的refimg是灰度的吗?我看你有refimg.Create(newwide,newheight,8,0);
这种方式创建的图像可能没有加调色板信息,所以你写出来的是全黑的
可以加上:
refimg.Create(newwide,newheight,8,0);
//加上初始化调色板
RGBQUAD *pQuad=new RGBQUAD[256];
for(int i1=0; i1<256; i1++)
{
pQuad[i1].rgbBlue=i1;
pQuad[i1].rgbGreen=i1;
pQuad[i1].rgbRed=i1;
pQuad[i1].rgbReserved=0;
}
refimg.SetPalette(pQuad, 256);

另外你的程序中,lpDst = (LPBYTE)p_data2+newwide*j+i;
newWide为每行的像素数,应该改为每行像素所占的字节数,
long lLineBytes=(wide*8 + 31) / 32 * 4;
long lLineNewBytes=(newwide*8 + 31) / 32 * 4;

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧