求教直接从hdc获得图像数据

gemaohui 2004-11-08 02:45:16
已知一个设备场景的句柄hdc, 其中已绘过图,已知其色深不大于8位,也就是说它可能是1位、4位或8位位图。可否使用 GetDIBits 或其他方法将这个hdc中的图像数据保存到一个字节数组中?并将该数组的图像统一为8位位图格式?也就是说数组中的每三个元素(三个字节)代表一个颜色值!并获知该图像的大小,即长、宽?

请各位高手赐教!问题解决后一定给分!!!若分不够,可倾家荡产,再加!
...全文
830 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
288794 2004-11-16
  • 打赏
  • 举报
回复
你创建一个8位的位图和其场景,然后将上述的图像绘制到其中再读取不行吗?
获取大小可以用 GetClipBox 函数
homezj 2004-11-14
  • 打赏
  • 举报
回复
保存图像一般都得使用DIB,8位以上的位图没有调色板,相对来说简单,1、4、8位图的调色板需单独处理。我正好在编个位图保存函数,但还没有完善,尤其是对8位以下位图的处理,可能不太可靠。

改变色深,我也试过,通过把DDB位图绘入DIBSection,可以解决,但高位色深转低位色深(8位及以下)效果没法保证,因为对调色板的处理太难,需要一种能总结出适于源位图的最优化调色板的算法,我还没想出来。到于低位转高位,就简单得多了。想了解DIB相关知识,看看下面一章的内容:

http://www.dky.8u8.com/c/windows/15.htm
helanshan 2004-11-13
  • 打赏
  • 举报
回复
up
rainstormmaster 2004-11-13
  • 打赏
  • 举报
回复
看这个:
http://community.csdn.net/Expert/topicview.asp?id=1538596
Geo_Cra 2004-11-13
  • 打赏
  • 举报
回复
bitblt就有转换过程了
gemaohui 2004-11-09
  • 打赏
  • 举报
回复
谢谢楼上的兄台,我看过你说的贴子,可我还是没搞懂如何能达到我的要求,我对这个GetDIBits没太弄明白啊,如果这个句柄中的位图不是真彩色的,是带调色板的位图,我到底该怎么办呢?
熊孩子开学喽 2004-11-09
  • 打赏
  • 举报
回复
参考下贴:http://community.csdn.net/Expert/topic/3252/3252001.xml?temp=.601803
其中有完整的过程代码,获取指定HDC中的图像并存放到一个3维数组中。
还有一个过程是将数组中的内容写到指定的HDC中。
AprilSong 2004-11-09
  • 打赏
  • 举报
回复
这样行不行~

先用BitBlt把图复制过来
Call BitBlt(Picture1.hDC, 0, 0, Screen.Width, Screen.Height, Me.hDC, 0, 0, SrcCopy)

然后就可以用对Picture1用GetDIBits了
只是要先根据Picture1的底色判断一下实际的宽和高
BlueBeer 2004-11-08
  • 打赏
  • 举报
回复
帮顶
guoxu_009 2004-11-08
  • 打赏
  • 举报
回复
帮你顶,有点难。

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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