⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 把BMP图片转换成手机中ICON的数据,支持8位和16位代码格式
💻 CPP
字号:

#include <iostream>
#include <sys/stat.h>
#include "zlib.h"
#include "bitmap.h"

#include <windows.h>
#include <wincon.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <NB30.H>//for NetBios command
#define MAX_HOSTMAC 30
using namespace std;
typedef struct _ASTAT_ {
    ADAPTER_STATUS adapt;
    NAME_BUFFER NameBuff[ 30 ];
}ASTAT,*PASTAT;
ASTAT Adapter;//定义LAN适配器
unsigned char srcHostmac[MAX_HOSTMAC];//授权的MAC,
////////////////////////////////////////////////////////////
//          判断目前的HOST是否是授权的                    //
//                 MAC HOST                               //
////////////////////////////////////////////////////////////
BOOL IsAcchost()
{
    NCB Ncb;
    UCHAR uRetCode;
    LANA_ENUM lenum;//目前LAN中的适配器数目
    int i;
    unsigned char curHostmac[MAX_HOSTMAC];//本机的MAC
	sprintf((char *)curHostmac,"0");
	sprintf((char *)srcHostmac,"00-09-6B-08-1E-56");//add accredited mac
    memset( &Ncb, 0, sizeof(Ncb) );
    Ncb.ncb_command = NCBENUM;
    Ncb.ncb_buffer = (UCHAR *)&lenum;
    Ncb.ncb_length = sizeof(lenum);
    uRetCode = Netbios( &Ncb );//枚举所有适配器
    for(i=0; i < lenum.length ;i++) {
		if(lenum.lana[i]!=0)
			continue;
        memset( &Ncb, 0, sizeof(Ncb) );
        Ncb.ncb_command = NCBRESET;
        Ncb.ncb_lana_num = lenum.lana[i];
        uRetCode = Netbios( &Ncb );
        memset( &Ncb, 0, sizeof (Ncb) );
        Ncb.ncb_command = NCBASTAT;
        Ncb.ncb_lana_num = lenum.lana[i];
        strcpy( (char*)Ncb.ncb_callname,  "*               " );
        Ncb.ncb_buffer = (unsigned char *) &Adapter;
        Ncb.ncb_length = sizeof(Adapter);
        uRetCode = Netbios( &Ncb );//获取MAC信息
        printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",lenum.lana[i], uRetCode );
        if( uRetCode == 0 ) {
            printf(
                "The Ethernet Number on LANA %d is: %02X-%02X-%02X-%02X-%02X-%02X\n",
                lenum.lana[i],
                Adapter.adapt.adapter_address[0],
                Adapter.adapt.adapter_address[1],
                Adapter.adapt.adapter_address[2],
                Adapter.adapt.adapter_address[3],
                Adapter.adapt.adapter_address[4],
                Adapter.adapt.adapter_address[5]
            );//打印目前的MAC信息
			sprintf((char *)curHostmac,
                "%02X-%02X-%02X-%02X-%02X-%02X",
                Adapter.adapt.adapter_address[0],
                Adapter.adapt.adapter_address[1],
                Adapter.adapt.adapter_address[2],
                Adapter.adapt.adapter_address[3],
                Adapter.adapt.adapter_address[4],
                Adapter.adapt.adapter_address[5]
				);//得到目前的MAC
			if(strcmp((char *)curHostmac,(char *)srcHostmac)==0)
			{
				printf("the host is accredited!!\n");
				return TRUE;
			}
			else
			{
				printf("the host is not accredited!!\n");
			//	return FALSE;
					return TRUE;
			}
        }
    }
}
//END IsAcchost

void Error(const char *txt) {
    printf("ERROR: %s\n", txt);
    exit(1);
}

void Usage(void) {
    puts("Usage: bmp2icon file[.bmp]");
    exit(1);
}

int ZEXPORT my_compress (Bytef *dest, uLongf *destLen, 
						 const Bytef *source, uLong sourceLen, int level)
{
    z_stream stream;
    int err;

    stream.next_in = (Bytef*)source;
    stream.avail_in = (uInt)sourceLen;
#ifdef MAXSEG_64K
    /* Check for source > 64K on 16-bit machine: */
    if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
#endif
    stream.next_out = dest;
    stream.avail_out = (uInt)*destLen;
    if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;

    stream.zalloc = (alloc_func)0;
    stream.zfree = (free_func)0;
    stream.opaque = (voidpf)0;

//    err = deflateInit(&stream, level);
    err =  deflateInit2(&stream, level, Z_DEFLATED, 11, MAX_MEM_LEVEL,
			 Z_DEFAULT_STRATEGY);

    if (err != Z_OK) return err;

    err = deflate(&stream, Z_FINISH);
    if (err != Z_STREAM_END) {
        deflateEnd(&stream);
        return err == Z_OK ? Z_BUF_ERROR : err;
    }
    *destLen = stream.total_out;

    err = deflateEnd(&stream);
    return err;
}

void print_icon8(FILE *fout, BYTE *icon, size_t len, const char *name, int s=1)
{
	size_t i,j;
	size_t w = ((((WORD)icon[0])<<8)+icon[1])*s;
	fprintf(fout, "const u8 %s[] = \n{\n", name);
	for (i=0; i<8&&i<len; i++)
	{
		//fprintf(fout, "0x%.2x,", icon[i]);
	}
	//fprintf(fout, "\n");
	while (i<len)
	{
		for (j=0; j<w&&i<len; j++,i++)
		{
			fprintf(fout, "0x%.2x,", icon[i]);
		}
		fprintf(fout, "\n");
	}
	fseek(fout, -3, SEEK_CUR);
	fprintf(fout, "\n};\n");
}

void outicon8(FILE *fout, bitmap &bmp)
{
	BYTE *picon;
	size_t len = 0;

	len = bmp.icon_size(bitmap::ICON_8BIT);
	picon = new BYTE[len];
	if (bmp.bmp_to_icon(picon, len))
	{
		fprintf(fout, "//Normal Image: size = %d\n", len);
		print_icon8(fout, picon, len, "icon8");
	/*
		unsigned long buflen = (len-8+12)*1.1;
		BYTE *pbuf = new BYTE[buflen+10];
		if (my_compress(pbuf+10, &buflen, picon+8, len-8, 9) == Z_OK)
		{
			memcpy(pbuf, picon, 8);
			pbuf[4] = 0x80;
			pbuf[8] = (buflen>>8)&0xff;
			pbuf[9] = (buflen)&0xff;
			fprintf(fout, "//Compressed Image: size = %d\n", buflen+10);
			fprintf(fout, "//Compress ratio: %.2f%%\n", (float)(buflen+10)*100/len);
			print_icon8(fout, pbuf, buflen+10, "icon8");
		}
		else
		{
			cout << "压缩数据失败.\n";
		}
		
		delete pbuf; */
	}
	else
	{
		cout << "转换ICON8不成功:" << bmp.error_msg() << endl;
	}
	delete picon;
}

void print_icon16(FILE *fout, BYTE *icon, size_t len, const char *name)
{
	size_t i,j;
	size_t width = (((WORD)icon[0])<<8)+icon[1];
	WORD w;
	fprintf(fout, "const unsigned char %s[] = \n{\n", name);
	for (i=0; i<8&&i<len; i+=2)
	{
	//	w = (((WORD)icon[i])<<8)+icon[i+1];
	//	fprintf(fout, "0x%.4x,", w);
	}
	//fprintf(fout, "\n");
	while (i<len)
	{
		for (j=0; j<width&&i<len; j++,i+=2)
		{
		//	w = (((WORD)icon[i])<<8)+icon[i+1];
		//	fprintf(fout, "0x%.4x,", w);
            fprintf(fout, "0x%.2x,0x%.2x,", icon[i+1],icon[i]);
		}
		fprintf(fout, "\n");
	}
	fseek(fout, -3, SEEK_CUR);
	fprintf(fout, "\n};\n");
}

void outicon16(FILE *fout, bitmap &bmp)
{
	BYTE *picon;
	size_t len = 0;

	len = bmp.icon_size(bitmap::ICON_16BIT);
	picon = new BYTE[len];
	if (bmp.bmp_to_icon(picon, len, bitmap::ICON_16BIT))
	{
		fprintf(fout, "//Normal Image: size = %d\n", len);
		picon[5] |= 0x40;
		picon[6] = 0xff;
		picon[7] = 0xff;
		print_icon16(fout, picon, len, "icon16");
	//	print_icon8(fout, picon, len, "icon16", 2);
	/*
		unsigned long buflen = (len-8+12)*1.1;
		BYTE *pbuf = new BYTE[buflen-8];
	
		if (my_compress(pbuf+10, &buflen, picon+8, len-8, 9) == Z_OK)
		{
			memcpy(pbuf, picon, 8);
			pbuf[4] = 0x80;
			pbuf[8] = (buflen>>8)&0xff;
			pbuf[9] = (buflen)&0xff;
			fprintf(fout, "//Compressed Image: size = %d\n", buflen+10);
			fprintf(fout, "//Compress ratio: %.2f%%\n", (float)(buflen+10)*100/len);
			print_icon8(fout, pbuf, buflen+10, "icon16", 2);
		}
		else
		{
			cout << "压缩数据失败.\n";
		}
		delete pbuf;
		*/
	}
	else
	{
		cout << "转换ICON8不成功" << bmp.error_msg() << endl;
	}
	delete picon;
}

int main(int argc, char *argv[])
{
    if(IsAcchost()==FALSE)
	{
		printf("The Command end!!\n");
		return 0;
	}
	
	int result = 1;
    char *p, *g;
	char filename[1024];
    if (argc < 2)
        Usage();
    p = strrchr(argv[1], '.');
    g = strrchr(argv[1], '\\');
    if (!p || (g && g > p)) {
        struct stat s;
        sprintf(filename, "%s.bmp", argv[1]);
        if (stat(filename, &s) < 0)
			Error("File no find!");
    } else
        sprintf(filename, "%s", argv[1]);

    if (p != NULL)
        *p = '\0';
	
	bitmap bmp;
	if (bmp.load_file(filename))
	{
		FILE *fout;
		sprintf(filename, "%s.h", argv[1]);
		fout = fopen(filename, "w");
		if (fout != NULL)
		{
			outicon8(fout, bmp);
			outicon16(fout, bmp);
			fclose(fout);
		}
		printf("Transfer success!\n");
	}
	else
	{
        Error("File format error");
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -