KCDDP ADV综合创作站 » 技术发布区 » [原创]可点击地图领域图像颜色索引浏览器


2007-2-20 19:33 Miliardo
[原创]可点击地图领域图像颜色索引浏览器

从Krkr自带的图形浏览器修改而来,希望对大家有用。

[code]
//Clickable Map Viewer for Kirikiri Adventure Game 3
//Modified by Miliardo from Graphics Viewer in TVP2's Samples
//Copyright (C) 1997-2006 W.Dee and contributors
//Copyright (C) 2001-2007 Whitefang Studio

class MyWindow extends Window
{
        var primlayer;
        var graphlayer;
        var checkers;
        var filemenu;
        var exitmenu;
        var provmenu;
        function MyWindow()
        {
                super.Window();
                menu.add(filemenu = new MenuItem(this, "文件(&F)"));
                filemenu.add(exitmenu = new MenuItem(this, "退出(&X)"));
                menu.add(provmenu = new MenuItem(this, "请拖动图像"));
                add(primlayer = new Layer(this, null));
                primlayer.left = primlayer.top = 0;
                primlayer.imageWidth = 400;
                primlayer.imageHeight = 70;
                primlayer.setSizeToImageSize();
                setInnerSize(primlayer.width, primlayer.height);

                // 图像
                add(graphlayer = new Layer(this, primlayer));
                graphlayer.width = primlayer.width;
                graphlayer.height = primlayer.height;
                graphlayer.setPos(0, 0);
                graphlayer.visible = true;
                graphlayer.font.height = 18;

                graphlayer.drawText(10, 10, "请将图像拖动到本窗口。",
                        0xff0000, 255, true, 200, 0x000000, 3, 2, 2);

                add(checkers = new Layer(this, primlayer));
                checkers.type = ltCoverRect;
                checkers.face = dfMain;
                checkers.imageWidth = 320;
                checkers.imageHeight = 320;
                for(var y = 0; y<320; y+=8)
                        for(var x = 0; x<320; x+=8)
                                checkers.colorRect(x, y, 8, 8, ((x^y)&0b1000)?0xc0c0c0:0x808080, 255);

                visible = true;
                System.title = "Clickable Map Viewer";
                super.caption = "Clickable Map Viewer";
        }

        function loadImage(file)
        {
                try
                {
                        var start = System.getTickCount();
                        var dic = graphlayer.loadImages(file);
                        Debug.message((System.getTickCount() - start) + " ms");
                        graphlayer.type = ltAlpha;
                        if(dic)
                        {
                                var ar = [];
                                ar.assign(dic);
                                for(var i = 0; i < ar.count; i+= 2)
                                        Debug.message(ar[i] + '=' + ar[i+1]);

                                if(dic.mode !== void)
                                {
                                        var layertypeinfo = imageTagLayerType[dic.mode];
                                        if(layertypeinfo !== void)
                                                graphlayer.type = layertypeinfo.type;
                                }
                        }
                }
                catch(e)
                {
                        System.inform("无法读取图像 : " + e.message);
                }
                graphlayer.setSizeToImageSize();
                setInnerSize(graphlayer.width, graphlayer.height);

                primlayer.setImageSize(graphlayer.imageWidth, graphlayer.imageHeight);
                primlayer.setSizeToImageSize();
                for(var y = 0; y<primlayer.height; y += 320)
                        for(var x = 0; x<primlayer.width; x += 320)
                                primlayer.copyRect(x, y, checkers, 0, 0, 320, 320);
        }

        function action(ev)
        {
                if(ev.type == "onFileDrop" && ev.target == this)
                {
                        loadImage(ev.files[0]);
                        graphlayer.loadProvinceImage(ev.files[0]);
                }
                else if(ev.type == "onClick" && ev.target == exitmenu)
                {
                        close();
                }
                else if(ev.type == "onClick" && ev.target == graphlayer)
                {
                        provmenu.caption = "你所点击的颜色的领域值为:"+graphlayer.getProvincePixel(ev.x,ev.y);
                }
        }
}

var win = new MyWindow();

[/code]

EXE版本下载:

[url]http://nw.keyfc.net/kcddpp/CMapViewer.rar[/url]

2007-2-20 19:39 全局变量D
出现啦~:lol
顶了收走^

2007-2-21 09:59 咔莎
这个要怎么用??:o

2007-2-22 15:49 Miliardo
打包了EXE版本,见顶楼。

2007-2-22 16:12 風籠兒
拉了一張上面只有紅、綠兩方格的png圖上去,結果…不知道發生什麼問題呢…可以解說一下嗎?

16:07:14 (info) Loading options from embedded area...
16:07:14 吉里吉里[Kirikiri] 2 执行内核/2.28.1.9906 (Compiled on Jan  1 2007 18:46:50) TJS2/2.4.21 Copyright (C) 1997-2006 W.Dee and contributors All rights reserved.
16:07:14 版本情报详细可以按 Ctrl + F12 详细阅览
16:07:14 Program started on Windows NT 5.1.2600 Service Pack 2 (Win32)
16:07:14 (info) Rebuilding Auto Path Table ...
16:07:14 (info) Total 0 file(s) found, 0 file(s) activated. (0ms)
16:07:14 (info) Total physical memory : 402112512
16:07:14 (info) Selected project directory : file://./c/documents and settings/administrator/desktop/cmapviewer/cmapviewer.exe>
16:07:14 (info) CPU #0 :   FPU:yes  MMX:yes  3DN:yes  SSE:yes  CMOVcc:yes  E3DN:yes  EMMX:yes  SSE2:no  TSC:yes  AMD(AuthenticAMD) [AMD Duron(tm) processor]  CPUID(1)/EAX=00000671 CPUID(1)/EBX=00000000
16:07:14 (info) finally detected CPU features :   FPU:yes  MMX:yes  3DN:yes  SSE:yes  CMOVcc:yes  E3DN:yes  EMMX:yes  SSE2:no  TSC:yes
16:07:14 (info) Specified option(s) : -logerror=clear -debugwin=no
16:07:14 (info) Loading startup script : startup.tjs
16:07:14 (info) Trying to read XP3 virtual file system information from : file://./c/documents and settings/administrator/desktop/cmapviewer/cmapviewer.exe
16:07:14 (info) Done. (contains 1 file(s), 1 segment(s))
16:07:14 (info) Startup script ended.
16:07:15 (info) CPU clock (roughly) : 1310MHz
16:07:35 (info) CPU clock : 1299.3MHz
16:07:50 (info) Rebuilding Auto Path Table ...
16:07:50 (info) Total 0 file(s) found, 0 file(s) activated. (10ms)
16:07:50 20 ms

16:07:50 脚本中发生例外
EAccessViolation

2007-2-22 16:29 Miliardo
XD这么快出Bug了……= =
图发给我吧……我查一下……

2007-2-22 16:46 風籠兒
圖片嗎?很簡單的一張圖啊。

[[i] 本帖最后由 風粌

2007-2-22 17:19 Miliardo
领域图像需要的图片必须是使用[b]索引颜色[/b],也就是有调色板的……
图画完请转换为索引颜色……否则不仅我的工具,放在KAG里用也会出错。

2007-2-22 17:49 天娜
我试了一下还挺好用的说。
原来面积最小的那个是0号啊,我那天手动编号从1开始的,怪不得每次都识别不到最小的……

2007-2-22 18:38 Miliardo
不是按照大小排序的……而是按照调色板中的颜色索引……

2007-2-23 10:23 風籠兒
唔,對不起,原來是我搞錯了。
回去再試一次。

2007-2-23 15:53 天娜
面积不等的时候的结果确是按照面积来的啊……我两张图分别是“紫蓝绿黑黄青红白”和“红白黄绿青蓝紫黑”,先后顺序完全按照块的目测大小。不过色块等大的时候白块就比黄块优先,我猜可能是等大的时候才照色盘来的吧。

不管怎么说,这个工具的结果和实测结果是完全一致的,很好用的说
:L

2007-2-23 20:07 Miliardo
如果都是按照面积的话……说明你的绘图软件分配调色板的时候就是按照面积来分配的……

2007-2-24 13:46 天娜
原来是绘图软件生成的啊,我以为引擎有自己的一套调色板之类的= =b
我用photoshop,直接用Ctrl Shift Alt+S存成PNG8的,应该算是比较通常的做法吧。

2007-2-25 13:36 天娜
photoshop里好像没有,大概是全自动的= =

2008-9-1 14:16 keakon
话说这个东东下载不能了-,-

2011-4-5 16:48 楚藤
:) 原来是放到控制台里执行啊。亏我想了半天在剧本里调用的方法。

2011-11-11 22:55 kyo
请问这个怎么用呀?
EXE格式的下载不动了LZ能再传一下吗?

页: [1]


Powered by Discuz! Archiver 5.5.0  © 2001-2006 Comsenz Inc.