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

📄 imagedecode.c

📁 用于移动设备上的java虚拟机源代码
💻 C
字号:
/* * @(#)imageDecode.c	1.11 02/07/24 @(#) * * Copyright (c) 1999-2002 Sun Microsystems, Inc.  All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms. */#include <stdio.h>#include <stdlib.h>#include <kni.h>#include <midpMalloc.h>#include <imageDecode.h>typedef struct _rids {    imageSrcData super;    uchar **buf;    int offset;    int len, remaining;} resourceImageSrcData, *resourceImageSrcPtr;static intgetByte(imageSrcPtr self){    resourceImageSrcPtr r = (resourceImageSrcPtr) self->ptr;    if (r->remaining < 0) return 0;    --(r->remaining);    return (*(r->buf))[r->offset++];}static intgetBytes(imageSrcPtr self, uchar *buf, int len){    resourceImageSrcPtr r = (resourceImageSrcPtr) self->ptr;    if (r->remaining < 0) return 0;    if (len > r->remaining) len = r->remaining;    if (buf != NULL) {        memcpy(buf, &((*(r->buf))[r->offset]), len);    }    r->remaining -= len;    r->offset += len;    return len;}/* The done function is called just before the structure is * freed.  It may be called before the image data is completely * initialized due to a initialization failure, so the structure may * not be cleanly initialized. */static voiddone(imageSrcPtr self){}static voidskip(imageSrcPtr self, int numBytes){    getBytes(self, NULL, numBytes);}static voidreset(imageSrcPtr self){    resourceImageSrcPtr p = (resourceImageSrcPtr) self->ptr;    p->offset = 0;    p->remaining = p->len;}static longgetPos(imageSrcPtr self){    resourceImageSrcPtr p = (resourceImageSrcPtr) self->ptr;    return p->offset;}static voidseek(imageSrcPtr self, long pos){    resourceImageSrcPtr p = (resourceImageSrcPtr) self->ptr;    p->offset = pos;    p->remaining = p->len - pos;}/* * WARNING: We need to pass in a pointer to a pointer for the source * data. The source data is actually allocated on the Java heap and * is protected by a TEMPORARY_ROOT prior to this call. Because of * this, (*data) will be updated every time the data object moves in * the Java heap. */imageSrcPtrcreateImageSrcFromData(char **data, int len) {    resourceImageSrcData *p = midpMalloc(sizeof(resourceImageSrcData));    if (p == NULL) {	return NULL;    }    p->super.ptr      = p;    p->super.done     = done;    p->super.reset    = reset;    p->super.getByte  = getByte;    p->super.getBytes = getBytes;    p->super.skip     = skip;    p->super.seek     = seek;    p->super.getpos   = getPos;    p->buf = (uchar **)data;    p->len = len;    p->super.reset((imageSrcPtr)p);    return &(p->super);}

⌨️ 快捷键说明

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