您的位置:程序门 -> delphi -> game,图形处理/多媒体



如何将二进制数组转换成16×16图片显示出来


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何将二进制数组转换成16×16图片显示出来
发表于:2007-04-11 22:53:02 楼主
我有一个32个字节的数组
想用图片显示出来
有什么好办法吗
发表于:2007-04-12 00:13:421楼 得分:0
var
    arr:   array[0..31]   of   byte;

procedure   tform1.button1click(sender:   tobject);
var
    i:   integer;
    bmp:   tbitmap;
begin
    //初始化数组,产生一些数据
    for   i   :=   0   to   32   do
        arr[i]   :=   i;


    bmp   :=   tbitmap.create;
    try
    //建立空的bmp格式
        bmp.pixelformat   :=   pf1bit;
        bmp.width   :=   16;
        bmp.height   :=   16;

        //拷贝数据
        for   i:=0   to   15   do
        begin
            move(arr[i*2],bmp.scanline[i]^,2);
        end;

        //测试图像
        canvas.draw(10,10,bmp);
    finally
        bmp.free;
    end;

end;
发表于:2007-04-12 18:19:362楼 得分:0
有一点错误
能把源程序发到我的邮箱吗?
wubo-cc@163.com
发表于:2007-04-13 10:53:553楼 得分:0
这就是源程序了啊,写了测试了一下,没问题啊,也没有保存。

什么错误?
发表于:2007-04-13 21:27:164楼 得分:0
测试成功了
谢谢
有什么方法能让它显示的图象大一点吗
现在的十倍就行
发表于:2007-04-13 22:04:295楼 得分:0
unit   unit1;

interface

uses
    windows,   messages,   sysutils,   variants,   classes,   graphics,   controls,   forms,
    dialogs,   stdctrls,   buttons,   extctrls;

type
    tform1   =   class(tform)
        panel1:   tpanel;
        image1:   timage;
        label1:   tlabel;
        edit1:   tedit;
        bitbtn1:   tbitbtn;
        bitbtn2:   tbitbtn;
        label2:   tlabel;
        procedure   bitbtn2click(sender:   tobject);
        procedure   bitbtn1click(sender:   tobject);


    private
        {   private   declarations   }
    public
        {   public   declarations   }
    end;

var
    form1:   tform1;
    f:   file;

implementation

{$r   *.dfm}
procedure   getqwcode(hz:   string;   var   q,   w:   word);
begin
    q   :=   byte(hz[1])   -   $a0;
    w   :=   byte(hz[2])   -   $a0;
end;

procedure   makechar(hz:   string;   n:   integer);
var
    offset:   integer;
    getstr:   array   [0..31]   of   byte;
    temp,dis:byte;
    x,   y,   i,   j:   integer;
    q,   w:   word;
begin
    getqwcode(hz,q,   w);
    offset   :=   (94*(q-1)+(w-1))*32;
        seek(f,   offset);
        blockread(f,   getstr,   sizeof(getstr));
//getstr
    x:=0;
    y:=0;
    i:=0;
    j:=0;

    while(i <=31)   do
    begin
        temp:=getstr[i];
        for   j:=0   to   7   do   begin
            dis:=temp   and   128;
            dis:=dis   shr   7;
            if   dis=1   then
                  form1.image1.canvas.rectangle(n*32+(x+1)*2-1,(y+1)*2-1,n*32+(x+1)*2-1+3,(y+1)*2-1+3);
            inc(x);
            if   x> 15   then   begin
                x:=0;
                inc(y);
            end;
            temp:=temp   shl   1;
        end;
        inc(i);
    end;
end;

procedure   tform1.bitbtn2click(sender:   tobject);
begin
    close;
end;

procedure   tform1.bitbtn1click(sender:   tobject);
var
    strchinese,   strchar:   string;
    i,   n:   integer;
begin
    form1.image1.canvas.brush.color   :=   clblack;
    form1.image1.canvas.fillrect(rect(0,0,324,36));
    form1.image1.canvas.brush.color   :=   clred;
    form1.image1.canvas.pen.color   :=   clblack;

    strchinese   :=   edit1.text;
    if   length(strchinese)   >   0   then   begin
        assignfile(f,   'hzk16.bin ');
        reset(f,   1);
          n   :=   length(strchinese)   div   2;
          for   i   :=   0   to   n   -   1   do   begin
                strchar   :=   copy(strchinese,   i*2+1,   2);
                makechar(strchar,i);

          end;
        closefile(f);
    end;
end;
end.

这个程序怎么样直接显示getstr中的内容
getstr自己定义


快速检索

最新资讯
热门点击