大家好啊,最近遇到一个问题,请大家帮忙解决一下,谢谢~
开发环境C++:
1.图像到转换到什么程度就可以用调用Api直接显示了?(我是菜鸟,原谅我的幼稚)
2.我已到了jpg,gif,png解码后的像素矩阵了,该怎么显示成图片,有的图片带透明色的,所以用SetPixl()不能全部画出啊?就算用这个函数画,效率很低啊!
PS:尽量不用GDI+,用C或者C++实现,也可以加我QQ306751504一起研究.多谢各位大神~~~~~

解决方案 »

  1.   

    对于问题1的进一步解释,图像处理到什么程度Windows就可以识别了,或者说到什么程度就可以像处理BMP那样简单的处理其他格式的图像了。不知道这样表达对不对
      

  2.   

    http://wenda.tianya.cn/wenda/thread?tid=29cff648f2d1f958
      

  3.   

    创建个BMP头, 后面跟像素数据.
    如果图像固定颜色固定大小, 你可以直接复制现有BMP图像的头, 24bit色,头大小是54字节,256灰度图像头一般是1078字节.
      

  4.   

    BMP数据部分,每行的数据字节数必须是4的倍数
      

  5.   

    楼上的这种办法我想过,组合成一个bmp格式的位图,用流加载,但是bmp格式的位图不支持透明色啊,但是依然感谢~!
      

  6.   

    c++?好像cximage挺不错我的delphi写的批量缩小工具【http://www.onlinedown.net/soft/115905.htm】,就是调用它编译出来的exe来实现的
      

  7.   

    如果要用GDI实现透明的话,要用到像素的合成,
    计算公式是:
    输出色彩=前景色*Alpha/255+背景色*(255-Alpha)/255
    举个例子来说,假设有一个点,其色彩的红色分量值为150,背景色的红色分量值为100,在进行输出时将透明度设置为200,这样,目标区域中最终显示的色彩将是:
    150*200/255+100*(255-200)/255=139
    用SetPixel速度当然慢,一般都是使用位图的ScanLine方法获取一行数据的指针,
    然后逐个像素修改。。
      

  8.   

    我刚做了个测试,和你思路是对的,但是这个ScanLine是自己实现的?原理是什么呢?
      

  9.   

    可以用GDI+,我有两个考虑,1。GDI+的核心是GDI,效率相比之下肯定低,2.GDI+可以处理大部分的图片,但是不能处理Apng的,也就是png的动画效果。我最终是想实现对Apng的显示。
      

  10.   

    忘了你用的是C,我们D中的位图类是有ScanLine的,其实也就是获取位图的数据
      tagBITMAP = record
        bmType: Longint;
        bmWidth: Longint;
        bmHeight: Longint;
        bmWidthBytes: Longint;
        bmPlanes: Word;
        bmBitsPixel: Word;
        bmBits: Pointer;//位图数据
      end;
    Apng这格式我倒没听过,你指的不处理PNG的动画效果我倒有点不理解。。
    像 GIF 这种格式的,直接用 GDI+ 绘制当前没有动画效果,
    GDI+有个帧的概念,一般我们D用GDI+处理   GIF 都是定时器+取帧再逐帧绘制。
      

  11.   

    GDI+是处理gif动画是很方便,这个我知道哦.APNG是对png的一种扩展,但是png的动画扩展名依然是png,许多浏览器都不支持,所以想写个读取png动画图片的类。