图形图像处理高手:与你继续讨论如何实现画图软件的多层(layer)处理??

tobato 2001-07-05 11:17:25
原来发过一篇贴子:

“如何实现画图软件的多层处理? 就像photoshop中的层一样? 怎么实现的可以在不同的层上绘制图像? ”

经过shu vonvon jesun 等同志的讨论 有以下结论:
1. 面向对象的层管理(比较有条理) 输出显示时使用顺序输出(队列或堆栈)或 按特殊需要输出
2. 关键问题透明的实现: 用32bit真彩的alpha分量(最高8bit)来表示透明,
所有的非透明色这8bit都置为同一个值(比如说0),而透明色置为另一个值 (例如255)
3. 刷新显示:如果有n个层的话,那在内存里就有n个位图,或者干脆就只是位图 的数据,每次刷新的时候将每个层叠和起来

见 : http://www.csdn.net/expert/topic/85/85275.shtm

我在书店翻了一段时间,在一本CGI(计算机图形接口)设计的书上找到一种层的
实现方式:
就是简单的为图形分一个Layer ID 比如直线1 layer id=2 就是第二层的
显示的时候根据layer ID 来判断是否显示

这种实现方式, 对CAD 等简单线条的系统 是可以考虑的但是对一个图像处理软件来说,就不行了,太慢了!

现在分层处理在图像处理中应该是比较成熟的技术了,但是好像掌握的人还不多。所以再次提出来给大家讨论!老外能做的,我们也能做!


...全文
318 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaoxiaofeng 2002-06-07
  • 打赏
  • 举报
回复
如果是图像与图形叠加,当然没问题,主要是多幅图像的叠加啊,就像photoshp中的图层一样.画布不能两次画位图啊.
gaoxiaofeng 2001-09-04
  • 打赏
  • 举报
回复
有源码吗?能不能发一份给我。我下载很慢很慢啦。谢谢各位相助。
我的信箱:gaoxiaofeng@etang.com
qancy_chen 2001-09-04
  • 打赏
  • 举报
回复
gz
xxb_xxb 2001-09-04
  • 打赏
  • 举报
回复
你到www.gimp.org看看gimp的源码吧。
gaoxiaofeng 2001-09-04
  • 打赏
  • 举报
回复
输出显示时堆栈?为什么位图只能画一幅,第二幅不再显示。两次调用setdibitstodeice,仅前一次真正画在屏幕上。第二次调用后不画图。
windindance 2001-07-10
  • 打赏
  • 举报
回复
up
PingPingPangPang 2001-07-09
  • 打赏
  • 举报
回复

不管什么引擎,最终都要硬件支持,photoshop不能只支持专有硬件,因为它是跨平台的,所谓透明的移动,只不过是鼠标落下的最后一步而已,你看windows的窗口也可以移动,但是它根本没有跟着你的鼠标动,你上当了。:P
classfactory 2001-07-09
  • 打赏
  • 举报
回复

图像引擎——是什么概念?!不要搞的那么神秘。photoshop是跨平台的,内部使用自己的图像格式(为了支持高分辨率),关于它是有SDK的,到网上搜一搜。图像的操作、合成全部是内存直接读写的,只有最后的显示是使用GDI函数——因为这里并没有快速动画,所以并没有使用DirectX或OpenGL。透明度并不是个很难的问题,就是不同层像素值的rgb根据比例合成的问题。每层一个mask是必须的。如果有机会我会做个demo的,可惜我太忙!

tobato 2001-07-09
  • 打赏
  • 举报
回复
矢量图和位图比,当然是可以话的,同意!
但是如果作图软件都用Mask来做透明的话,呵呵,不要说半透明了,你能做几个Mask?
而且,作图软件的图还是可以透明的移动的!! Mask 也跟着移动? 不是把?
多做几层的话,呵呵,一层要一个Mask? 不是把????

想了几天, 我觉得Photoshop用的绝对是自己的图像引擎! 当然了,图像格式也是自己的!
不会是现成什么微软的函数!

对了,半透明的话,我想应该也是难点!

大家继续讨论啊!
PingPingPangPang 2001-07-08
  • 打赏
  • 举报
回复
因为块拷贝只有AND、OR、XOR、COPY几种操作方式,层间叠加就成了非常头痛的事情。

矢量图直接画,只要人力够,不愁画不来。
PingPingPangPang 2001-07-08
  • 打赏
  • 举报
回复

位图透明,只要做一个掩膜用的底片就成了。

半透明,要做各层的底片,而且层有限制,逐点计算不可取,一定要使用块拷贝才能保证足够的速度。
tobato 2001-07-07
  • 打赏
  • 举报
回复
为什么不难? 怎么实现呢?
windindance 2001-07-06
  • 打赏
  • 举报
回复
分层速度怎么样?我感觉2-3层已经很慢了。:(有什么好方法吗?
PingPingPangPang 2001-07-06
  • 打赏
  • 举报
回复
透明不难,难的是半透明
tobato 2001-07-06
  • 打赏
  • 举报
回复
to pingpingpangpang: 矢量图当然画起来要快得多了! 而且透明也不是什么问题。
但是复杂的图像就...头疼
tobato 2001-07-06
  • 打赏
  • 举报
回复
to xxxbird CLIP计算是什么?
to all: 感觉难点就是实现透明,和显示速度的问题! 难道photoshop用的是自己的图像显示
引擎所以速度快吗?

lvfengxun 2001-07-06
  • 打赏
  • 举报
回复
关键是对图象的分层的数据结构和在显示之前的准备工作,如使用memory dc和使用window的加速功能等,对这个问题一直很感兴趣,以前作过一点,有一些体会,欢迎来信讨论,
cominfomail@263.net
nustchen 2001-07-06
  • 打赏
  • 举报
回复
gz
leky2000 2001-07-06
  • 打赏
  • 举报
回复
学习
PingPingPangPang 2001-07-05
  • 打赏
  • 举报
回复

对于矢量图来讲,分层非常简单,链表前面的先画,就是底层,后面的后画,就是顶层。
对于带有水印式样的分层,想必是采用AND的画法,对于RGB(255,255,255),每层分配一个RGB(1,1,1),这样可以分配8层,各层位图叠加时只要与一下就好了。
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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