| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1298 人关注过本帖, 1 人收藏
标题:连连看游戏 以及 (读取并显示位图),(截屏)头文件
只看楼主 加入收藏
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏(1)
 问题点数:0 回复次数:4 
连连看游戏 以及 (读取并显示位图),(截屏)头文件
BITBLT.H:

    这是我今晚写的一个头文件。它可以读取24bpp的BMP后缀的位图。
    注意,
    (1)仅针对24bpp,BMP格式,不能读取其他格式图像。
    (2)请注意由于像素颜色需要放入内存,而16位系统只能申请非常有限的内存,
              因此它只能加载较小的问题。图片尺寸必须较小,最好在40000像素以下。
              (256*256=64KB)。
              如果图片太大,将无法申请到足够空间。

    然后调用里面的BitBlt函数可以把位图显示在屏幕指定位置。
    显示时,采用了颜色空间距离拟合为VGA模式下的16色。
    还可以获取和设置位图指定坐标的颜色。具体方法可以查看该文件的代码。
    具体用法参考BitBltDemo.c中的代码。


    这个头文件可以放到TC的INCLUDE文件夹中。以后只要像引用其他头文件那样引用它即可。

    在这个头文件里我模仿了一些微软的做法,例如以句柄实现数据结构的封装等。

CPYSCR.H

    我从前写的一个头文件。用于在TC的绘图模式下截图屏幕,并保存到BMP文件。
    同样,可以放在TC的INCLUDE文件夹中。

BitBltDemo.c

    这是BITBLT.h头文件的使用范例。注意,代码中使用的是图片的绝对路径,因此
    运行前需要把附件所带的CELLS.bmp的绝对路径设置正确。否则会出现加载位图失败。


lian_jfd.c

    我写的一个连连看游戏。采用了CELLS.bmp文件作为图片资源。该文件的核心算法讲解略。
    编译前请把文件结尾的main函数中的图片和驱动文件所在的路径设置正确即可。

VGA模式下的截图.BMP

    使用CPYSCR.H在VGA模式下,对初始化后的连连看游戏进行的截图。(还未绘制进度条)


具体文件请参考附件的压缩包。
---------------------------------------------------
在BitBlt.h中的一些重要函数:
---------------------------------------------------
/*读取一个问题,返回位图句柄,如果失败,返回NULL*/
HBITMAP LoadBitmap(char *filename);
/*释放位图对象占用的内存*/
bool DeleteBitmap(HBITMAP hBitmap);
/*把图片贴到屏幕上!指定屏幕上的目标矩形 和 位图上的起始点*/
bool BitBlt(HBITMAP hBitmap, int nXDest, int nYDest, int nWidth, int nHeight, int nXSrc, int nYSrc);
/* 获取位图尺寸 */
void GetBitmapSize(HBITMAP hBitmap, BMSIZE* sz)
/* 获取某点的color值,返回0xff表示失败 */
BYTE GetPixel(HBITMAP hBitmap, int nXPos, int nYPos);
/* 设置某点颜色值,返回是否设置成功 */
bool SetPixel(HBITMAP hBitmap, int nXPos, int nYPos, BYTE color);

-------------------------------------------------------------
在cpyscr.h中,有以下重要函数:
-------------------------------------------------------------
/* 指定在VGA模式下的屏幕左上角和右下角坐标,把该矩形区域截屏并保存到给定的filename文件*/
/* 被保存的文件格式是bpp=4的BMP位图。如有其他需求可以在Photoshop中做进一步处理。*/
void CopyScreen(char* filename,int left,int top,int right,int bottom);

-------------------------------------------------------------
以上文件的具体代码,限于篇幅,不在这里贴出了,请下载附件进行查看。
请注意:本压缩包的文件全部使用TC2.0编译的。请不要使用VC去编译。

[[it] 本帖最后由 hoodlum1980 于 2008-8-28 03:19 编辑 [/it]]

snap2345.jpg (37.82 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册


连连看.rar (104.53 KB) 附件压缩包

搜索更多相关主题的帖子: VGA模式下截屏 连连看游戏 图片资源 
2008-08-28 01:30
hoodlum1980
Rank: 2
来 自:浙江大学
等 级:论坛游民
威 望:2
帖 子:289
专家分:23
注 册:2008-2-24
收藏
得分:0 
BitBlt.h 的使用示范代码如下: 注意:图片应该尽可能小于40000像素。
程序代码:
#include <stdio.h>
#include <bitblt.h>

void main()
{
    int gd=DETECT, gm;
    HBITMAP hBitmap = LoadBitmap("c:\\tc\\MyCode\\demo2.bmp");
    BMSIZE sz;
    if(hBitmap!=NULL)
    {
        GetBitmapSize(hBitmap, &sz);
        initgraph(&gd, &gm, "c:\\tc\\");
        BitBlt(hBitmap, 0,0,sz.cx,sz.cy, 0, 0);
        DeleteBitmap(hBitmap);
        getch();
        closegraph();
    }
    else
    {
        printf("LoadBitmap Fail!\n");
        getch();
    }
}
2008-08-28 02:56
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 
支持一下,继续努力

天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2008-08-28 03:14
zhangganglei
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-3-6
收藏
得分:0 
收藏了,感谢楼主
2012-05-04 21:13
快速回复:连连看游戏 以及 (读取并显示位图),(截屏)头文件
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035748 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved