打印

[求助] ev合成,英雄×魔王

引用:
原帖由 haibara 于 2010-02-23 14:50 发表


在合成前我们先要判断这是什么合成类型:1,alpha blending;2,color blending
判断的标准就是差分图是否是32位,如果是则是alpha blending,反之亦然

对于alpha blending,可以使用DirectMuxer和MagickMerge ...
这个成功了,嘎嘎,偶总算会合成了,中间就几个失败的,继续改进中
那个正则的话应该哪里学的?以前只是用正则处理些文本文档,就知道几个命令。。。
我的空间,一些稀有北米版游戏下载及其他
为了避免被HX,大部分没有预览,留给识货人士。。。
http://hi.baidu.com/acgcg
北米版及日版CG分流
http://tora.to/discutter/40144.htm


引用:
原帖由 airlose 于 2010-02-23 16:54 发表

这个成功了,嘎嘎,偶总算会合成了,中间就几个失败的,继续改进中
那个正则的话应该哪里学的?以前只是用正则处理些文本文档,就知道几个命令。。。
知道语法的话,多多练习就是
引用:
#include<stdio.h>
struct bmp
{
    int dibid;
    long filesize;
    long re;
    long offset;

    long header;
    long width;
    long heigth;
    int planes;
    int bpp;
    long com;
    long datasize;
    long hre;
    long vre;
    long colors;
    long icolors;
};
int chkdata(char *p1,char *p2,int size)
{
    while(size)
    {
        if(*p1!=*p2)return 0;
        p1++;p2++;size--;
    };
    return 1;
};
main()
{
    char *p1,*p2;
    int y1=0,y2;
    FILE *f1,*f2,*f3;
    struct bmp bmphead[2];
    /*初始化,打开文件,申请内存,写文件头*/
    f1=fopen("g:\\windows\\desktop\\1.bmp","rb");
    f2=fopen("g:\\windows\\desktop\\2.bmp","rb");
    f3=fopen("g:\\windows\\desktop\\6.bmp","wb");
    fread(&bmphead[0],54,1,f2);
    fread(&bmphead[1],54,1,f1);
    fwrite(&bmphead[0],54,1,f3);
    p1=(char *)malloc(bmphead[0].width*3);
    p2=(char *)malloc(bmphead[0].width*3);
    /*下部文件直接拷贝*/
    for(y2=0;y2<bmphead[0].heigth;y2++)
    {
        fread(p1,bmphead[0].width*3,1,f2);
        fwrite(p1,bmphead[0].width*3,1,f3);
    };
    /*上部文件处理*/
    while(!chkdata(p1,p2,bmphead[1].width*3))
    {
        fread(p2,bmphead[1].width*3,1,f1);
        if(feof(f1))break;
        y1++;
    };
    bmphead[0].heigth+=bmphead[1].heigth-y1;/*计算出f3的高度*/
    for(;y1<bmphead[1].heigth;y1++)
    {
        fread(p1,bmphead[1].width*3,1,f1);
        fwrite(p1,bmphead[1].width*3,1,f3);
    };
    /*重写文件头及关闭文件*/
    rewind(f3);
    fwrite(&bmphead[0],54,1,f3);
    fclose(f1);fclose(f2);fclose(f3);
}
看了下日期,是2006/2/5,當時應該是學C語言不久(其實偶C語言學的時間不是很長),就表扔磚頭了.

嘛,偶解釋一下程序流程吧.
首先,這是專門針對"24位色的BMP無損無壓縮圖像"用的.
作用在於,對一幅超過屏幕分辨率大小的CG分別進行上下截圖,再用此程序合成.

BMP的圖像數據是自下而上,從左到右的.
所以首先載入的是下部的圖片,再載入上部圖片.
把下部的圖片載入完成後,再用下部圖片的最後一條線做為識別.
以640x480圖像,換成坐標來說,就是下部圖片的 (0,0)至(0,639) 這一條線做為識別,
再找出上部圖片的同一條線,進行合並處理.

看起來似乎很容易會判斷錯誤,但其實不會的.
因為遊戲CG的精度很高,除非是弄到矢量數據,否則真的很難找出第2條一模一樣的線.

說回跟本主題的關係.
偶看樓主那幾幅圖,似乎也可以用類似的算法.
以小圖的某一條線,作為引導,搜索出大圖同一條線位置,再推算出坐標.
再複雜一點,可以用高是2-3像素的"面"為標識,搜索出大圖同一位置,再推算出坐標.
超級無敵美工渣.
LS你忘记了调用free
虽然对此程序来说这是小问题...

[ 本帖最后由 sfsuvival 于 2010-02-24 05:59 编辑 ]
我怎么觉得不对,应该说差分图边缘(线)不可能与基本图一样的,应该说像素比较接近(按照面搜索,估计与photoshop的photomerge差不多,非常不稳定,而且只能效果更差吧)

ps:有可能我想当然了,不过既然没有这样的合成器,我觉得怎么简单应该是不可能,我以前思考过怎么实现的不过我都假设边缘不一样的

[ 本帖最后由 haibara 于 2010-02-24 08:43 编辑 ]
请指点一下,
source regex  
delta regex
这两个选项的填写规则?

老是提示:image not  matched
引用:
原帖由 sailotos 于 2010-02-24 08:27 发表
请指点一下,
source regex  
delta regex
这两个选项的填写规则?

老是提示:image not  matched
source regex为$1.edt.bmp
delta regex为(ev\d+)[a-z]\.edt\.bmp
海大,偶现在在合成《光与影的传说》
合成了一部分
还有一部分
7S03A.bmp要匹配到source regex
主文件是
7S03.bmp
7S03A.bmp
后面需要合成的文件名
7S03K2.bmp
7S03K3.bmp
7S03K4.bmp
现在偶合成了7S03.bmp部分
还有7S03A.bmp不会
主要是不知道怎么填写source regex
我的空间,一些稀有北米版游戏下载及其他
为了避免被HX,大部分没有预览,留给识货人士。。。
http://hi.baidu.com/acgcg
北米版及日版CG分流
http://tora.to/discutter/40144.htm


引用:
原帖由 airlose 于 2010-02-24 11:02 发表
海大,偶现在在合成《光与影的传说》
合成了一部分
还有一部分
7S03A.bmp要匹配到source regex
主文件是
7S03.bmp
7S03A.bmp
后面需要合成的文件名
7S03K2.bmp
7S03K3.bmp
7S03K4.bmp
现在偶合成了7S03. ...
既然可以匹配到7S03了。那么加个后面A就是了
引用:
原帖由 haibara 于 2010-02-24 11:18 发表


既然可以匹配到7S03了。那么加个后面A就是了
原来这个只要在后面加A就可以了,懂了~~
我的空间,一些稀有北米版游戏下载及其他
为了避免被HX,大部分没有预览,留给识货人士。。。
http://hi.baidu.com/acgcg
北米版及日版CG分流
http://tora.to/discutter/40144.htm


查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布]  预览帖子  恢复数据  清空内容

当前时区 GMT+8, 现在时间是 2024-11-22 04:19

Processed in 0.019418 second(s), 7 queries.