CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

各位大侠高手,图片与C/C++结合的难题

楼主sunsonh()2005-08-01 18:05:50 在 C/C++ / 新手乐园 提问

各位大侠  
          我欲解决用C/C++语言处理一个图片动作的难题,希望大家给点思路。  
   
          说起来很简单,做起来没方向。  
   
          就是将坐标为(0,100)的图片如何动态移动到(100,100)。需要做的效果和FLASH中类似,也就是说,要出现那种中间过程,不是一下子就到位的,可以花上10秒时间,慢慢移过去那种,拜托了各位!  
   
          一定要有中间过程,希望大家都来参与啊!分不够再索取 问题点数:80、回复次数:15Top

1 楼zaisheng09(故雁)回复于 2005-08-01 18:07:35 得分 0

友情upTop

2 楼antijpn(antijpn)回复于 2005-08-01 18:08:49 得分 0

直接求代码,转新手乐园Top

3 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-01 18:46:08 得分 0

你的问题   可以这样处理  
   
   
  有两个函数  
   
   
  putimage()  
  和  
  getimage()  
   
  就是用getimage()     得到   (0,100)的图片   ,进行移动  
   
  由于你还要看到过程  
   
  可以这样,  
   
  就是   把   getimage()   得到的图片   不直接   putimage()   到目标坐标  
   
  而是以一个象素   为单位   移动  
   
          //如果速度还是太快       可以加上一个   delay()     来延长时间显示效果  
   
   
   
   
   
   
  函数简介如下:  
   
  1.     getimage()   保存图像函数  
   
  功能:   函数getimage()保存左上角与右下角所定义的屏幕上像素图形到指定的内存区域。  
  用法:   该函数调用方式为void   getimage(int   left,int   top,int   right,int   bottom,void   *buf);  
  说明:   函数中参数(left,top)为要保存的图像屏幕的左上角,(right,bottom)为其右下角,buf指向保存图像的内存地址。调用getimage()保存屏幕图像,可用imagesize()函数确定保存图像所需字节数,再用malloc()函数分配存储图像的内存(内存分配必须小于64KB),还可以用下面函数putimage()输出getimage()保存的屏幕图像。  
        这个函数对应的头文件为graphics.h  
  返回值:   无  
  例:   把带有两对角线的矩形拷贝到屏幕其它位置上:  
  #include<garphics.h>  
  #include<stdlib.h>  
  #include<conio.h>  
  void   main()  
  {  
        int   driver,mode;  
        unsigned   size;  
        void   *buf;  
        driver=DETECT;  
        mode=0;  
        initgraph(&driver,&mode,"");  
        sector(15);  
        rectangle(20,20,200,200);  
        setcolor(RED);  
        line(20,20,200,200);  
        setcolor(GREEN);  
        line(20,200,200,20);  
        getch();  
        size=imagesize(20,20,200,200);  
        if(size!=-1){  
              buf=malloc(size);  
              if(buf){  
                    getimage(20,20,200,200,buf);  
                    putimage(100,100,buf,COPy_PUT);  
                    putimage(300,50,buf,COPy_PUT);  
              }  
        }  
        outtext("press   a   key");  
        getch();  
        restorecrtmode();  
  }  
   
   
   
  2.     putimage()   输出图像函数  
   
  功能:   函数putimage()将一个先前保存在内存中的图像输出到屏幕上。  
  用法:   此函数调用方式为void   putimage(int   left,int   top,void   *buf,int   ops);  
  说明:   参数(left,top)为输出屏幕图像的左上角,即输出图像的起始位置。buf指向要输出的内存中图像。参数ops控制图像以何种方式输出到屏幕上。表1-13给出了图像输出方式。  
   
  表1-13     图像输出方式  
  --------------------------------------------------------------------  
        输出方式符号名             取值                               含           义  
  --------------------------------------------------------------------  
        COPy_PUT                             0                   图像输出到屏幕上,取代原有图像  
        xOR_PUT                               1                   图像和原有像素作异或运算  
        OR_PUT                                 2                   图像和原有像素作或运算  
        AND_PUT                               3                   图像和原有像素作与运算  
        NOT_PUT                               4                   把求反的位图像输出到屏幕上  
  --------------------------------------------------------------------  
   
  1)   COPy_PUT输出方式  
        图像中每个像素都直接绘制到屏幕上,取代原有图像像素,包括空白的图像像素(背景)。完全空白的图像可以用来擦除其它图像或屏幕的一部分。但通常选择xOR_PUT输出方式擦除原有图像。  
  2)xOR_PUT输出方式  
        原有屏幕每个像素与相应的图像字节作“异或”运算,其结果画到屏幕上。当某一图像和屏幕上原有图像作“异或”运算时,屏幕显示的是两个图像的合成。若相同的图像作异或运算,将有效地擦除该图像,留下原始屏幕。这种输出方式,对动画制作是非常有用的。  
  3)OR_PUT输出方式  
        每个图像字节和相应的屏幕像素作“或”运算,再将结果画到屏幕上,这种输出方式也叫“两者取一”。记住,像素中的每位和图像中的每位作“或”运算,这样所得结果是背景和图像的彩色合成图像。  
  4)AND_PUT输出方式  
        选择AND_PUT图像输出方式时,屏幕像素和图像字节中都显示的位,运算后仍显示,例如,星图像中的空白背景擦除了方块轮廓以及填充色,只有星图像复盖着的方块留下,即运算后,显示两者相同的图像。  
  5)NOT_PUT输出方式  
        NOT_PUT输出方式,除了把图像的每位求反---图像中所有黑的像素(0000)变成了白色(1111),其它方面与COPy_PUT相同。背景图像被重画后将消失。  
        putimage()函数对应的头文件为garphics.h  
  返回值:   无  
  例:   下面的程序说明了imagesize(),getimage()和putimage()函数的调用方法:  
  #include<graphics.h>  
  #include<conio.h>  
  #include<stdlib.h>  
  void   box(int   ,int,int,int,int);  
  void   main()  
  {  
        int   driver,mode;  
        unsigned   size;  
        void   *buf;  
        driver=DETECT;  
        mode=0;  
        initgraph(&driver,&mode,"");  
        box(20,20,200,200,15);  
        setcolor(RED);  
        line(20,20,200,200);  
        setcolor(GREEN);  
        line(20,200,200,20);  
        getch();  
        size=imagesize(20,20,200,200);  
        if(size!=-1)  
        {  
              buf=malloc(size);  
              if(buf){  
                    getimage(20,20,200,200,buf);  
                    putimage(120,120,buf,COPy_PUT);  
                    putimage(280,60,buf,COPy_PUT);  
              }  
        }  
        outtext("Press   a   key");  
        getch();  
        restorecrtmode)(;  
  }  
  void   box(int   startx,int   starty,int   endx,int   endy,int   color)  
  {  
        setcolor(color);  
        rectangle(startx,starty,endx,endy);  
  }  
  图像函数是对屏幕图像操作进行讨论的,但对屏幕图形同样适用。实际上,屏幕图形也是一种特定的屏幕图像,它可称为外形屏幕图像或称轮廓屏幕图像。因此图像与图形不必区分。Top

4 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-01 18:49:50 得分 0

忘记说了一点  
   
  就是     在getimage()   保存图像函数   之后  
   
  不要忘记   把   getimage()     的区域覆盖掉   ,  
   
  就是要给人的感觉是   图形移动   ,那么在新图形出现以前  
   
  原有的   图形必须被抹去   (贴上空白图形就可以了)  
   
   
  在后面的循环中    
   
  每一步都要进行同样的过程   ...Top

5 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-01 18:52:28 得分 0

楼主如果对于这个还有问题  
   
   
  需要探讨  
   
   
   
  请发消息给我   (论坛有消息发送功能,点几我的   ID   就可以了)  
   
  大家可以互相研究一下   ...Top

6 楼sunsonh()回复于 2005-08-02 09:10:57 得分 0

非常感谢您的支持和帮助!我先研究一下啊Top

7 楼sunsonh()回复于 2005-08-02 10:20:29 得分 0

着急了!问了几个前辈说,嵌入式的可能和这个不一样。我正在做一个机顶盒的界面,还不一定能用这个来实现。而且,我用VC++6.0  
  怎么说:  
  #include<graphics.h>  
   
  没有啊Top

8 楼conglingkaishi(请不要给我分)回复于 2005-08-02 10:28:45 得分 0

不能用的话就直接调用INT10H,然后用直接写屏。Top

9 楼TomaTooooo(醋熘白菜)回复于 2005-08-02 17:03:18 得分 0

flash   里的我倒是会,C++我就不会了,哈哈Top

10 楼jixingzhong(瞌睡虫·星辰)回复于 2005-08-03 10:29:38 得分 0

呵呵     楼主的情况很复杂呀  
   
   
   
  呵呵    
   
   
  友情   UP   !Top

11 楼sunsonh()回复于 2005-08-03 13:30:03 得分 0

救命啊Top

12 楼atgjplh(永远的C/C++(unix/liunx))回复于 2005-08-03 14:28:17 得分 0

学习一下Top

13 楼lxqing1981(新)回复于 2005-08-03 20:12:44 得分 0

upTop

14 楼sunsonh()回复于 2005-08-04 18:04:25 得分 0

UP   P   PTop

15 楼mayflowers(黯然神伤)回复于 2005-08-04 20:56:54 得分 0

要看你的image是在系统提供的控件(比如dialog)上画,还是直接在屏幕上画。如果是前者,还要看你是在控件里添加图形还是用图形覆盖控件的显示等等等等。  
   
  至于具体的头文件和函数,要看你所用的嵌入系统的sdk支持什么样的图形库,由它决定。  
   
  什么都不知道的情况下,大家很难说啊,呵呵。Top

相关问题

  • c#求难题
  • 请教c难题!
  • C指针的难题???
  • Visual C++ 图形难题
  • del_c_sharp的大难题
  • 高手请进,c难题
  • ASP.NET+C#+ORACLE过程难题!!!!!!!
  • 难题啊!怎么做这种图片?
  • C 语言难题,极具挑战性
  • C#难题--手写电子签名

关键词

  • 图像
  • 函数
  • 屏幕
  • 像素
  • 图形
  • 内存
  • 控件
  • 移动
  • 输出
  • putimage

得分解答快速导航

  • 帖主:sunsonh

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo