标题:[求助]使用dev-cpp加allegro目前遇到的问题,请指教
只看楼主
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
结帖率:100%
 问题点数:0 回复次数:2 
[求助]使用dev-cpp加allegro目前遇到的问题,请指教

学习新环境真是困难重重啊,目前有两个问题我自己实在是找不到答案了,如果大家谁了解如何解决,还望不吝赐教,万分感谢
均使用allegro工程:
1.汉字输出问题:
(1)FILE 型指针是否存在?
我使用FILE *fp;语句程序报错FILE未定义;
(2)16位数字报错
我使用0xa0 程序报错;


程序如下:
#include <allegro.h>
#include "stdio.h"

void init();
void deinit();

int main() {
init();
int i,j,k;
int white=maloc(255,255,255);
char mat[16][2],chinease[3]="我";
  FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
i=chinease[0]-0xa0;j=chinease[1]-0xa0; /*获得区码与位码*/
  fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET); /*将文件指针指向字模的初始位置*/
  fread(mat,32,1,HZK);
for(j=0;j<16;j++)
  for(i=0;i<2;i++)
   for(k=0;k<8;k++) /*扫描这个字节的每一位,如果是1则显示一个点,否则不显示*/
   if(mat[j][i] & (0x80>>k))/*0x80相当于:10000000 和字节作与运算时
如果最高位是1则与运算的结果是1,如果是0则与运算结果为0
0x80>>k是向右移位,当k==1时右移结果:01000000再与运算
如此循环完这个字节*/
    putpixel(screen, i*8+k, j, white);


while (!key[KEY_ESC]) {
/* put your code here */
}

deinit();
return 0;
}
END_OF_MAIN()

void init() {
int depth, res;
allegro_init();
depth = desktop_color_depth();
if (depth == 0) depth = 32;
set_color_depth(depth);
res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
if (res != 0) {
allegro_message(allegro_error);
exit(-1);
}

install_timer();
install_keyboard();
install_mouse();
/* add other initializations here */
}

void deinit() {
clear_keybuf();
/* add other deinitializations here */
}

--------------------------------------------------------------------

2.位图输出问题:
(1)同样是24位位图同样的程序为什么有的能输出有的不能?
a同样是用load_bmp();
b同样使用blit()等函数;
c用样是使用allegro的工程;
d一旦使用不可用的图片后,系统会弹出报错窗口;
(2)程序中的透明色(真彩模式下为亮粉色,红蓝最大绿为0)的位图如何制作 ?
a我用 windows自带的画图中无法实现,取色填充后颜色不对,程序中也不 能被忽略,如toumingse/pic3所示效果
b同样使用画图,我尝试打开pic1后,将欲填充图片复制粘贴过来,会只能 显示黑色部分
c是否有专业软件制作图片?

oH3tiYA1.rar (959.78 KB) [求助]使用dev-cpp加allegro目前遇到的问题,请指教


附件为以上问题涉及的图片
搜索更多相关主题的帖子: allegro int void FILE white 
2007-08-25 20:38
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
得分:0 

你程序里有全角空格,我改了一下:
#include <allegro.h>
#include <stdio.h>

void init();
void deinit();

int main() {
init();
int i,j,k;
int white=makecol(255,255,255);
char mat[16][2],chinease[3]="我";
FILE *HZK;
if((HZK=fopen("hzk16","rb"))==NULL)exit(0);
i=chinease[0]-0xa0;
j=chinease[1]-0xa0;/*获得区码与位码*/
fseek(HZK,(94*(i-1)+(j-1))*32l,SEEK_SET); /*将文件指针指向字模的初始位置*/
fread(mat,32,1,HZK);
for(j=0;j<16;j++)
for(i=0;i<2;i++)
for(k=0;k<8;k++) /*扫描这个字节的每一位,如果是1则显示一个点,否则不显示*/
if(mat[j][i] & (0x80>>k))/*0x80相当于:10000000 和字节作与运算时
如果最高位是1则与运算的结果是1,如果是0则与运算结果为0
0x80>>k是向右移位,当k==1时右移结果:01000000再与运算
如此循环完这个字节*/
putpixel(screen, i*8+k, j, white);


while (!key[KEY_ESC]) {
/* put your code here */
}

deinit();
return 0;
}
END_OF_MAIN()

void init() {
int depth, res;
allegro_init();
depth = desktop_color_depth();
if (depth == 0) depth = 32;
set_color_depth(depth);
res = set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
if (res != 0) {
allegro_message(allegro_error);
exit(-1);
}

install_timer();
install_keyboard();
install_mouse();
/* add other initializations here */
}

void deinit() {
clear_keybuf();
/* add other deinitializations here */
}

2007-08-26 20:25
奔跑的鸟
Rank: 1
等 级:新手上路
帖 子:391
专家分:0
注 册:2006-1-20
得分:0 
辛苦苍穹老大了,原来是全角空格惹的货..这下编译通过了,但是无视后面的死循环一闪即过..

简单的快乐着~
2007-08-26 21:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-165419-1-1.html




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

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