| 
 家族: 心の小居 - 十二翼炽天使 
						   
  きみのそらはなにいろですか? ... ...
 帖子5594 精华0 积分17414 雪の涙1033  雪の露13042  雪の晶0  雪の過0  在线时间8802 小时 注册时间2007-12-22 最后登录2025-10-30 
 | 
						13楼
													大							中
							小												发表于 2010-02-24 01:53 																					只看该作者 
												
						
						
																											引用:#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像素的"面"為標識,搜索出大圖同一位置,再推算出坐標. 
								超級無敵美工渣.   |