如题,最好有代码。也可以是链接。
发到。顶者有分
发到。顶者有分
解决方案 »
- win2003通过ADO访问vfp(viusal foxpro)数据库问题,在线等
- 求助关于ddk方面的内容
- 请大侠指教!!!!急!!!!
- r
- 网络编程高手请留个QQ号。
- 关于窗口静态拆分的几个问题。
- 为什么在我的SDI里不能显示我所画的图形啊,请高人给予指点!!!!
- ftp在局域網裡面的訪問負載量的問題???急!!!!!!!
- 拜托!赐教!!
- 用ATL开发组件来封装asp网页中遇到的问题:IRequest::get_Form(IRequestDictionary **ppDictReturn)应该怎么用?谢谢!
- 在单击"编辑"菜单中的"剪切"之前,"粘贴"不可用,请高手帮帮小弟啊!
- md5后得到一个16进制的16位字符串,怎么转换成小写字符串呢?
一个简单的色彩解码然后再编码的过程。
把rgb的格式值设置成32位的方式自然就ok
但是这样的图像和原来没有什么分别,毕竟原图像素信息并没有发生变化
然后把透明数据全置0,即每个点的第4个字节变逐个转换听上去麻烦,因为是位图,完全不需要考虑与周边其它点的关系,每个点的处理时间都是常数,实际上复杂度为O(n), 复杂度看来应该是最简单的了。当然在并行机上你可以同时进行N个点的转换。还有一个变32位的方法,把图处理成CMYK格式的,每个点需要4个字节。
把RGB 查表换算成 CMY值,
然后直接用G值直接作K值就行。
看下面两行代码:
for(int i = 0; i < 10; i++) Func();
Func();Func();Func();Func();Func();Func();Func();Func();Func();Func();
你说哪个运算效率高,哪个代码效率高?是不是都应该写成第二行的格式。
你对
我也不想说了。至于你这问题的答案 ,提个参考意见吧,纯粹学术性的。我给你一段VB的代码,其中的Host.InitializeDIB是一个创建32位的DIBSECITON的过程。
希望我得到的不在是攻击
同时为我前面不当的言语表示道歉。 If IsBmp(FileName) = True Then
Dim Image As Long
Dim Dimensions As RECTF, Rct As RECT
Dim BmpData As BitmapData, Rtn As Long
GdipLoadImageFromFile StrPtr(FileName), Image ‘使用GDI+加载图像
If Image <> 0 Then
GdipGetImageBounds Image, Dimensions, UnitPixel ' 得到图像的大小,以像素为单位,这个函数理论上不会不成功
If Host.InitializeDIB(CLng(Dimensions.nWidth), CLng(Dimensions.nHeight)) = True Then
Rct.Right = Dimensions.nWidth
Rct.Bottom = Dimensions.nHeight
GdipBitmapLockBits Image, Rct, ImageLockModeRead, PixelFormat32bppARGB, BmpData '以ARGB格式读取图像数据
CopyMemory ByVal Host.Pointer, ByVal BmpData.scan0, Dimensions.nWidth * Dimensions.nHeight * 4 '复制图像数据
GdipBitmapUnlockBits Image, BmpData
GdipDisposeImage Image
LoadPictureFromFile = True
End If
Else
GdipDisposeImage Image '不知道在这种情况下需要不需要Dispose
End If
End If
为什么我不喜欢用逐个像素处理的方法,就是因为第一我没法对所有格式进行测试,第二不能保证兼容性。
我想既然我们都在微软的平台下干活,最好的情况还是尽量采用它所提供的方法,牺牲一定的速度,换来整个项目的速度。
本人最近因为项目的关系,刚刚接触mfc+gdi才一个月,难免会有很多大家看起来很幼稚的问题,但是我想这是每一个新手的必经之路吧,
就是希望能帮忙的尽量帮个忙,帮不了的顶一下也可以。
源位图的数据肯定是都要读一遍的,目标位图的数据也肯定是要写一遍的,这部分没法省,只能是考虑尽量减少循环次数、减少循环内的分支、少用BYTE操作。