一个关于DIB逻辑调色板实现的问题

lzr4304061988012 2008-01-10 09:06:23
我写了一个程序,通过递增至DIB的颜色表项值创建了逻辑调色板,实现到系统调色板时,显示时图象并没有出现颜色渐变至图象本色的效果,不知道为什么?
而且调试时,发现REALIZEPALETTE()返回值是0,那不是说明系统调色板没有改变一项吗?不懂!(其实就是个实现DIB渐显的小程序)
while(count<10)
{
Invalidate(1);
for (i = 0; i < (int)wNumColors; i++)
{
lpPal->palPalEntry[i].peRed = evenDIB[i].r-(lpbmi->bmiColors[i].rgbRed)/10;
lpPal->palPalEntry[i].peGreen = evenDIB[i].g-(lpbmi->bmiColors[i].rgbGreen)/10;
lpPal->palPalEntry[i].peBlue = evenDIB[i].b-(lpbmi->bmiColors[i].rgbBlue)/10;
lpPal->palPalEntry[i].peFlags = 0;

}
evenDIB[i].r+=(lpbmi->bmiColors[i].rgbRed)/10;
evenDIB[i].g+=(lpbmi->bmiColors[i].rgbGreen)/10;
evenDIB[i].b+=(lpbmi->bmiColors[i].rgbBlue)/10;

if(m_palDIB)
{
delete m_palDIB;
m_palDIB=NULL;
}
m_palDIB=new CPalette;
if(!(m_palDIB->CreatePalette(lpPal)))
return ;
CPalette *m_oldPal=dc.SelectPalette(m_palDIB,FALSE);
dc.RealizePalette;/返回值是0??????????
return ;

dc.SelectPalette(m_oldPal,FALSE);
CRect rectDIB;
rectDIB.left=0;
rectDIB.right=::DIBWidth(lpbi);
rectDIB.bottom=::DIBHeight(lpbi);
rectDIB.top=0;
::PaintDIB(dc.GetSafeHdc(),&rectDIB,m_hDIB,&rectDIB,m_palDIB);
Pause();
count++;
}
...全文
144 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2008-01-31
  • 打赏
  • 举报
回复
这个问题还在啊,建议看看MSDN中的例子DIBLOOK。
阜哥 2008-01-31
  • 打赏
  • 举报
回复
我和你碰到同样的问题,图片显示出来的效果和用系统自带工具看到的效果不一样。
而且我用两种方式创建逻辑调色板,两种方式显示出来的效果居然不一样。

关注中。。。
sandy_zc_1 2008-01-13
  • 打赏
  • 举报
回复

要在系统中使用调色板,系统必须是256色或以下的。

不过这个效果的实现没有必要和系统打交道啊,在一个256色的DIB设备中进行调色板的变化,然后Blt到其它真彩色的设备上就可以了。
lzr4304061988012 2008-01-13
  • 打赏
  • 举报
回复
谢谢,非常谢谢,我现在也是瞎学,大学里难得见老师一次,同学也不知道,自学好辛苦呐,真希望有人帮忙!
lzr4304061988012 2008-01-11
  • 打赏
  • 举报
回复
我这个程序有个暂停函数PAUSE();延迟300毫秒执行一次循环,而且有INVALIDAYE(1),不是等同与定时器吗?
菜牛 2008-01-11
  • 打赏
  • 举报
回复
代码没有仔细看,不过在循环中改变界面显示是没有效果的。用定时器来刷新。
lzr4304061988012 2008-01-11
  • 打赏
  • 举报
回复
小弟不懂,属性也要设置成256色吗?现在哪还有这样的电脑,这么说DIB还有什么用?
lzr4304061988012 2008-01-11
  • 打赏
  • 举报
回复
没有人帮帮吗?
jameshooo 2008-01-11
  • 打赏
  • 举报
回复
系统也是256色的吗?你把显示属性设置成256色试试看
lzr4304061988012 2008-01-11
  • 打赏
  • 举报
回复
我改过了,我把改变逻辑调色板和绘图都放在ONTIMER中,能够正常刷新,但是每次刷新后图象颜色还是没渐变,我想这应该是我REALIZEPALETT()函数返回值为0有关系吧,但是我又不知道为什么会返回的是0,请指教,谢谢!
菜牛 2008-01-11
  • 打赏
  • 举报
回复
不能等同,因为你的循环阻塞了消息循环。
lzr4304061988012 2008-01-10
  • 打赏
  • 举报
回复
大哥!我显示的是256色位图,我知道256色以上的没颜色表
jameshooo 2008-01-10
  • 打赏
  • 举报
回复
8位(256色)及以下的显示才会使用调色板,8位以上的系统已经不使用调色板了,你怎么使用系统调色板

19,472

社区成员

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

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