#include "global_head.h"
#include "public.h"
#include "image_list.h"
extern int g_nThreadInputNum;
extern BOOL g_bTreadControl;
extern int g_nPopCur;
extern int g_nListControl;
extern FILE* f;
extern char INFOPATH[];
extern int g_nReadThreadTotal;
extern int g_nWriteThreadTotal;
//--------------------------------------------------------------|
// 16进制显示 DispHex() |
// void DispHex(void * buf, u8 len, u8 flag, u8 * msg) |
// |
// 入口: buf ---要显示的数据 |
// len ---数据长度 |
// flag ---reserve(00h) |
// msg ---title(NULL不显示 |
// 功能: 16进制显示 |
// 返回: |
//--------------------------------------------------------------|
void DispHex(void * buf, u8 len, u8 flag, u8 * msg)
{
int i, j;
u8 buf1[4096];
if(len>500) len=500;
j=0;
if(msg!=NULL)
{
sprintf(buf1,"\n%s: ",msg);
//j=strlen(msg)+4; // it's a bug 2005.10.6
j=strlen(buf1);
}
for(i=0;i<len;i++)
sprintf(&buf1[3*i+j],"%02x ",(u8)((char*)buf)[i]);
puts(buf1);
}
void StartThread(void *psub)
{
#ifdef OS_LINUX
pthread_attr_t attr;
struct sched_param param;
pthread_t tid;
// pthread_attr_destroy(&attr);
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr,SCHED_RR);
pthread_attr_getschedparam(&attr, ¶m);
param.sched_priority = 15;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(&tid, &attr, (void *)psub, NULL);
#endif
#ifdef OS_WIN
_beginthread(psub, 0, NULL);
#endif
}
void StartThreadEx(void *psub, u8 *param)
{
#ifdef OS_WIN
_beginthread(psub, 0, param);
#endif
}
u16 GetU16(u8 * p)
{
return( ((u16)(p[0]))<<8 | p[1] );
}
//--------------------------------------------------------------|
// 把BCD码还原成ASCII码unpack_digits() low-->high style |
//int unpack_digits( BYTE *dest, BYTE *src_base, |
// WORD digit_offset, WORD num_digits) |
// |
//入口: dest : --存放转换后的ASCII |
// digit_offset: -- bcd码第多少个半子节 |
// src_base : -- BCD 码串 |
// num_digits: -- ASCII码个数 |
// |
//功能: |
//返回: |
//--------------------------------------------------------------|
int unpack_digits( BYTE *dest, BYTE *src_base,
WORD digit_offset, WORD num_digits)
{
BYTE *src;
WORD msn_next; /* flag indicating MS nible is next to be recovered */
msn_next = (digit_offset & 0x01);
src = src_base + (digit_offset >> 1);
while (num_digits--)
{
if (msn_next)
{
/*
* Recover the most significant nibble and advance the
* source pointer.
*/
// *dest++ = ((*src++ >> 4) & 0x0f);
// *dest++ = ((*src++ >> 4) & 0x0f) | 0x30 ; //2000/7/2
*dest = ((*src++ >> 4) & 0x0f) | 0x30 ;
if(*dest!=0x3F)
dest++;
else
*dest=0;
msn_next = 0;
}
else
{
/*
* Recover the least significant nibble and leave the
* source pointer unchanged.
*/
// *dest++ = *src & 0x0f;
//*dest++ = (*src & 0x0f) | 0x30; //2000/7/2
*dest = (*src & 0x0f) | 0x30; //2000/7/2
if(*dest!=0x3F)
dest++;
else
*dest=0;
msn_next = 1;
}
}
*dest=0; ////2000/7/2
return(0);
}
/*----------------------------------------------*/
/* 功 能: 把BCD码还原成ASCII码 */
/* 说 明:high-->low style */
/* 返回值:0-成功;-1-失败 */
/* 参 数:dest-存放转换后的ASCII */
/* digit_offset-bcd码第多少个半子节 */
/* src_base-BCD码串 */
/* num_digits-ASCII码个数 */
/*----------------------------------------------*/
int unpack_digits1( BYTE *dest, WORD digit_offset,
BYTE *src_base, WORD num_digits)
{
BYTE *src;
BYTE ch;
WORD msn_next; /* flag indicating MS nible is next to be recovered */
msn_next = (digit_offset & 0x01);
src = src_base + (digit_offset >> 1);
while (num_digits--)
{
if (msn_next)
{
ch=*src++ & 0x0f;
if(ch==0X0F) break;
if(ch>=0 && ch<=9) *dest++ = ch|0x30;
if(ch>=0x0a && ch<=0x0e) *dest++ = 55+ch;
msn_next = 0;
}
else
{
ch=*src>>4;
if(ch==0X0F) break;
if(ch>=0 && ch<=9) *dest++ = ch|0x30;
if(ch>=0x0a && ch<=0x0e) *dest++ = 55+ch;
msn_next = 1;
}
}
*dest=0x00;
return(0);
}
void test(void)
{
int a=12;
int b=33;
int semid;
pthread_mutex_lock(&locker);
g_var++;
printf("g_var=%d\n",g_var);
pthread_mutex_unlock(&locker);
printf("to public test\n");
//usleep(5*1000*1000);
usleep(5*1000*1000);
printf("end threed\n");
}
void read_image()
{
GDALDatasetH hSrcDS;
BYTE* buff;
list_node *listnode;
GDALDriverH hDriver;
char str_filepath[100];
int nWidth;
int nHeight;
int nBand;
CPLErr eErr1;
GDALDataType eType;
int k=0;
int i=0;
while(1)
{
pthread_mutex_lock(&locker);
g_var++;
if(g_var>15)
g_var=1;
k=g_var%15;
/*if(k==0)
continue;*/
printf("g_var=%d\n",g_var);
pthread_mutex_unlock(&locker);
sprintf(str_filepath,"%s/%d.jpg",path,k);
printf("%s read\n",str_filepath);
hSrcDS=GDALOpen(str_filepath,GA_ReadOnly);
nWidth=GDALGetRasterXSize(hSrcDS);
nHeight=GDALGetRasterYSize(hSrcDS);
nBand=GDALGetRasterCount(hSrcDS);
buff=(BYTE*)malloc(nWidth*nHeight*nBand*(sizeof(BYTE)));
int nWordSize = GDALGetDataTypeSize(GDALGetRasterDataType(GDALGetRasterBand(hSrcDS, 1)))/8;
eType=GDALGetRasterDataType(GDALGetRasterBand(hSrcDS, 1));
eErr1 = GDALDatasetRasterIO( hSrcDS, GF_Read,
0, 0, nWidth, nHeight,
buff, nWidth, nHeight,
eType, nBand, NULL,0, 0, 0 );
listnode=(list_node*)malloc(1*sizeof(list_node));
sprintf(listnode->file_name,"%d.jpg",k);
listnode->buff=buff;
listnode->width=nWidth;
listnode->height=nHeight;
listnode->wordsize=nWordSize;
listnode->band=nBand;
pthread_mutex_lock(&locker);
add_tail(listnode);
pthread_mutex_unlock(&locker);
GDALClose(hSrcDS);
//i++;
//if(i==16)
// break;
}
}
void write_image()
{
GDALDatasetH hSrcDS;
GDALDatasetH hDstDS;
BYTE* buff;
BYTE* buff_trans;
list_node *listnode;
GDALDriverH hDriver;
char str_filepath[100];
char str_filename[100];
int nWidth;
int nHeight;
int nBand;
CPLErr eErr1;
GDALDataType eType;
char **papszCreateOptions = NULL;
char *JPGCreatOptions[2];
int k=0;
char str[100];
char m_strFormat[100];
sprintf(str,"QUALITY=%d",80);
char * strtemp;
strtemp=malloc(strlen(str)*sizeof(char));
memset(strtemp,0,strlen(str));
strcpy(strtemp,str);
JPGCreatOptions[0] = strtemp;
JPGCreatOptions[1] = NULL;
int i=0;
if(g_bTreadControl==TRUE)
{
while(g_bTreadControl==TRUE)
{
pthread_mutex_lock(&locker);
listnode=get_listhead();
pthread_mutex_unlock(&locker);
if(listnode==NULL)
{
f=fopen(INFOPATH,"a+t");
fprintf(f,"listhead=NULL\n");
fclose(f);
g_bTreadControl=FALSE;
g_nListControl=0;
printf("g_nListControl=0,write end\n");
// usleep(2*1000*1000);
break;
}
if(listnode->bTrans==FALSE)
{
printf("write sleep\n");
usleep(1000*1000L);
continue;
}
mkdir(path2);
sprintf(str_filepath,"%s/%s",path2,lis
没有合适的资源?快使用搜索试试~ 我知道了~
Linux+GDAL开源类库开发的空间数据格式转换程序
5星 · 超过95%的资源 需积分: 9 15 下载量 192 浏览量
2010-07-30
02:39:16
上传
评论
收藏 291KB GZ 举报
温馨提示
共40个文件
h:13个
c:3个
old:3个
在Linux下用C开发的空间数据格式转换程序,为学习Linux下GDAL空间编程开发、数字图像编程、Linux开发不可多得的例程。
资源推荐
资源详情
资源评论
收起资源包目录
GDALDataset.tar.gz (40个子文件)
GDALDataset
public.c 13KB
global_head.h 1KB
main.c 5KB
public.o 18KB
image_list.h 468B
main 32KB
os_def.h 240B
datatype.h 2KB
image_list.o 5KB
GDALINLCUDE
gdal_rat.h 5KB
gdaljp2metadata.h 5KB
gdal_version.h 699B
gdal_pam.h 11KB
gdal_frmts.h 5KB
gdal.h 33KB
gdal_priv.h 29KB
gdal_proxy.h 16KB
vc
vc.opt 48KB
_UpgradeReport_Files
UpgradeReport.xslt 12KB
UpgradeReport_Plus.gif 71B
UpgradeReport.css 3KB
UpgradeReport_Minus.gif 69B
vc.sln.old 893B
vc.vcproj 5KB
vc.sln 863B
vc.vcproj.LENOVO-55251509.lf.user 1KB
vc.dsw 527B
vc.vcproj.7.10.old 4KB
Debug
vc80.pdb 36KB
BuildLog.htm 5KB
vc80.idb 11KB
vc.suo.old 9KB
vc.dsp 4KB
UpgradeLog.XML 4KB
vc.ncb 747KB
vc.suo 19KB
main.o 9KB
image_list.c 1KB
Makefile 488B
public.h 1KB
共 40 条
- 1
资源评论
- skgllgaks2014-02-24很好,特别是Makefile很规范
- df_yangbenzhi2015-03-16刚下载,感觉到资源还可以。
lcyberneticsf
- 粉丝: 6
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功