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

📄 img.cc

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 CC
📖 第 1 页 / 共 2 页
字号:
		  createAlphaImage( X, img);		PutAlpha( img->alpha, col, row, (val >> 24));		  		//XPutPixel( img->xImg, col, row, pix);		img->qImg->setPixel(col,row,val);		/*		if ( !img->xMask )		  createXMaskImage( X, img);		XPutPixel( img->xMask, col, row, 0);		XPutPixel( img->xImg, col, row, 0);		*/				if( !img->qImg_AlphaMask)		  img->qImg_AlphaMask = new QImage(img->width,img->height,img->qImg->depth());		img->qImg_AlphaMask->setPixel(col,row,0);	  }    }  }  env->ReleaseIntArrayElements( rgbPels, rgbs, JNI_ABORT);}voidJava_java_awt_Toolkit_imgComplete( JNIEnv* env, jclass clazz, Image * img, jint status ){  /*   * Check for alpha channel reduction. Note that full alpha images aren't created   * with Shm (by policy), so you might loose the Shm speed factor. This method is just   * called for external (generic) production, since our own prod facilities usually   * know better if and how to do alpha support   */  printf("imgComplete\n");  if ( img->alpha &&  !needsFullAlpha( X, img, 0.0) )	reduceAlpha( X, img, 128);}voidJava_java_awt_Toolkit_imgFreeImage( JNIEnv* env, jclass clazz, Image * img){  Image *next, *first = img;  /* we have to be aware of image rings (GIF movies), iterate */  do {#if 0	if ( img->pix ){	  XFreePixmap( X->dsp, img->pix);	  img->pix = 0;	}	/*	 * note that XDestroyImage automatically frees any non-NULL data pointer	 * (since we explicitly allocated the data, we better free it explicitly, too)	 * malloc, free might be resolved	 */	if ( img->xImg ){	  if ( img->shmiImg ) {		DBG( AWT_IMG, printf( "free Shm: %p %p %p (%dx%d)\n", img, img->xImg, img->shmiImg,						img->width, img->height));		destroyShmXImage( X, img, False);	  }	  else {		DBG( AWT_IMG, printf( "free: %p %p (%dx%d)\n", img, img->xImg, img->width, img->height));		AWT_FREE( img->xImg->data);		img->xImg->data = 0;		XDestroyImage( img->xImg);	  }	  img->xImg = 0;	}	if ( img->xMask ){	  if ( img->shmiMask ) {		DBG( AWT_IMG, printf( "free Shm mask: %p %p %p (%dx%d)\n", img, img->xMask, img->shmiMask,						img->width, img->height));		destroyShmXImage( X, img, True);	  }	  else {		DBG( AWT_IMG, printf( "free mask: %p %p (%dx%d)\n", img, img->xMask, img->width, img->height));		AWT_FREE( img->xMask->data);		img->xMask->data = 0;		XDestroyImage( img->xMask);	  }	  img->xMask = 0;	}#endif	if ( img->alpha ) {	  AWT_FREE( img->alpha->buf);	  AWT_FREE( img->alpha);	  img->alpha = 0;	}	next = img->next;	AWT_FREE( img);	img = next;  } while ( (img != 0) && (img != first) );}void*Java_java_awt_Toolkit_imgCreateScaledImage ( JNIEnv* env, jclass clazz,											 Image* img, int width, int height ){//  int depth;  printf("imgCreateScaledImage img=%p w=%d h=%d\n",img, (int)width, (int)height);  Image *scaledImg = createImage( width, height);  *(scaledImg->qImg) = img->qImg->smoothScale(width,height);  reconvertImage(scaledImg);/*    if ( img->xImg ) {	createXImage( X, scaledImg);	if ( img->xMask )	  createXMaskImage( X, scaledImg);	initScaledImage ( X, scaledImg, img,					  0, 0, width-1, height-1,					  0, 0, img->width-1, img->height-1);  }  else if ( img->pix ) {	depth = DefaultDepth(  X->dsp, DefaultScreen( X->dsp));	scaledImg->pix  = XCreatePixmap( X->dsp, X->root, width, height, depth);  }*/  return scaledImg;}voidJava_java_awt_Toolkit_imgProduceImage ( JNIEnv* env, jclass clazz, jobject producer, Image* img ){  printf("imgProduceImage\n");  int            i, j;  int            r, g, b;  unsigned long  pix;  jclass         prodClazz, modelClazz;  jmethodID      modelCtor, setDim, setCM, setHints, setPix, imgCompl;  jobject        model;  jintArray      pelArray;  jint           *pels;  jboolean       isCopy;  prodClazz  = env->GetObjectClass( producer);  modelClazz = env->FindClass( "kaffe/awt/JavaColorModel");  modelCtor = env->GetStaticMethodID( modelClazz, "getSingleton", "()Lkaffe/awt/JavaColorModel;");  setDim    = env->GetMethodID( prodClazz, "setDimensions", "(II)V");  setCM     = env->GetMethodID( prodClazz, "setColorModel", "(Ljava/awt/image/ColorModel;)V");  setHints  = env->GetMethodID( prodClazz, "setHints", "(I)V");  setPix    = env->GetMethodID( prodClazz, "setPixels", "(IIIILjava/awt/image/ColorModel;[III)V");  imgCompl  = env->GetMethodID( prodClazz, "imageComplete", "(I)V");  model     = env->CallStaticObjectMethod( modelClazz, modelCtor);  /* for JDK compat, the pixel buffer has to be large enough to hold the *complete* image */  pelArray  = env->NewIntArray( img->width * img->height);  pels = env->GetIntArrayElements( pelArray, &isCopy);  env->CallVoidMethod( producer, setDim, img->width, img->height);  env->CallVoidMethod( producer, setCM, model);  env->CallVoidMethod( producer, setHints, 6); /* TOPDOWNLEFTRIGHT | COMPLETESCANLINES */#if 0  if ( img->pix && !img->xImg ) {	img->xImg = XGetImage( X->dsp, img->pix, 0, 0, img->width, img->height, 0xffffffff, ZPixmap);  }#endif  if ( img->qImg ) {	for ( j=0; j<img->height; j++ ) {	  for ( i=0; i<img->width; i++ ) {		if ( (img->qImg_AlphaMask == 0) || img->qImg_AlphaMask->pixel( i, j) ) {		  pix = img->qImg->pixel(i,j);//		  pix = XGetPixel( img->xImg, i, j);//		  rgbValues( X, pix, &r, &g, &b);		  pels[j*img->width+i] = (0xff000000 | (r << 16) | (g << 8) | b);		}		else {		  pels[j*img->width+i] = 0;		}	  }	}  }#if 0  if ( img->pix && img->xImg ) {	XDestroyImage( img->xImg);	img->xImg = 0;  }#endif  if ( isCopy ) {    env->ReleaseIntArrayElements( pelArray, pels, JNI_COMMIT);  }  env->CallVoidMethod( producer, setPix, 0, 0, img->width, img->height, model, pelArray, 0, img->width);  env->CallVoidMethod( producer, imgCompl, 3); /* 3 = STATICIMAGEDONE */}/************************************************************************************ * native format production dispatcher routines (GIF, jpeg, png, ..) */#define SIG_LENGTH 4#define SIG_GIF    1#define SIG_JPEG   2#define SIG_PNG    3Image *unknownImage = 0;  /* fill in some default image here */static int imageFormat ( unsigned char* sig ) {  if ( (sig[0] == 'G') && (sig[1] == 'I') && (sig[2] == 'F') )	return SIG_GIF;  if ( (sig[0] == 0xff) && (sig[1] == 0xd8) && (sig[2] == 0xff) && (sig[3] == 0xe0) )	return SIG_JPEG;  if ( (sig[0] == 0x89) && (sig[1] == 'P') && (sig[2] == 'N') && (sig[3] == 'G') )	return SIG_PNG;  return 0;}bool reconvertImage(Image *img){    bool success = FALSE;    if ( !img->qImg) return FALSE;/*    if ( alloc_context ) {	QColor::destroyAllocContext( alloc_context );	alloc_context = 0;    }    if ( useColorContext ) {	alloc_context = QColor::enterAllocContext();	// Clear the image to hide flickering palette	QPainter painter(this);	painter.eraseRect(0, menubar->heightForWidth( width() ), width(),height());    }    QApplication::setOverrideCursor( waitCursor ); // this might take time*/        img->qpm = new QPixmap();    if ( img->qpm->convertFromImage(*(img->qImg), 0) )    {	//img->qpmScaled = QPixmap();	//scale();	success = TRUE;    } else {	img->qpm->resize(0,0);				// couldn't load image    }//    updateStatus();//    QApplication::restoreOverrideCursor();	// restore original cursor//    if ( useColorContext() )//	QColor::leaveAllocContext();    return success;				// TRUE if loaded OK}void*Java_java_awt_Toolkit_imgCreateFromFile ( JNIEnv* env, jclass clazz, jstring fileName ){    Image *img = 0;  int   infile;  char  *fn = java2CString( env, X, fileName);  unsigned char  sig[SIG_LENGTH];  printf("imgCreateFromFile file=%s\n",fn);  QImage *image = new QImage();  bool ok = FALSE;#if 0    if ( (infile = AWT_OPEN( fn)) >= 0 ) {	if ( AWT_READ( infile, sig, sizeof(sig)) == sizeof(sig) ) {	  AWT_REWIND( infile);  /* some native converters can't skip the signature read */	  switch ( imageFormat( sig) ) {	  case SIG_GIF:		//fprintf(stderr,"got gif!!!!\n");		//img = readGifFile( infile,fn);		//fprintf(stderr,"img=%p\n",img);		//if(img->next) break;                //AWT_FREE(img);	  case SIG_JPEG:		//img = readJpegFile( infile);		//break;	  case SIG_PNG:		//img = readPngFile( infile);		//break;		//QApplication::setOverrideCursor( waitCursor );#endif		ok = image->load( fn);		//QApplication::restoreOverrideCursor();		if (ok) {		  img = createImage( image->width(),image->height());		  img->qImg = image;                  ok = reconvertImage(img);		  if ( !ok ) img->qpm->resize(0,0);		}#if 0		break;	  default:		img = unknownImage;	  }	}	AWT_CLOSE( infile);  }#endif    return img;}void*Java_java_awt_Toolkit_imgCreateFromData ( JNIEnv* env, jclass clazz,										  jbyteArray jbuffer, jint off, jint len ){  printf("imgCreateFromData\n");  Image *img = 0;  jboolean isCopy;  jint   length = env->GetArrayLength( jbuffer);  jbyte  *jb = env->GetByteArrayElements( jbuffer, &isCopy);  unsigned char *buf = (unsigned char*) jb + off;    /* in case of a buffer overrun, we probably have a JPEG read error, anyway */  if ( (off + len) <= length ) {	//QByteArray a;	//a.setRawData((char *) buf, sizeof(buf));	QImage *image = new QImage();        image->loadFromData(buf, len);	bool ok = FALSE;#if 0	switch ( imageFormat( buf) ) {	case SIG_GIF:	  //img = readGifData( buf, len);	  //if(img->next) break;          //AWT_FREE(img);	case SIG_JPEG://	  img = readJpegData( buf, len);//	  break;	case SIG_PNG://	  img = readPngData( buf, len);//	  break;#endif	img = createImage( image->width(),image->height());        img->qImg = image;   	ok = reconvertImage(img);   	if ( !ok ) img->qpm->resize(0,0);#if 0   	break;	default:	  img = unknownImage;	}#endif  }  env->ReleaseByteArrayElements( jbuffer, jb, JNI_ABORT);  return img;  }void*Java_java_awt_Toolkit_imgSetFrame ( JNIEnv* env, jclass clazz, Image* img, int frameNo ){  printf("imgSetFrame\n");  Image *imgCur = img;  if ( !img->next )	return img;  while ( img->frame != frameNo ) {	img = img->next;	if ( img == imgCur ) {		break;	}  }  return img;}/************************************************************************************ * field access */jintJava_java_awt_Toolkit_imgGetWidth ( JNIEnv* env, jclass clazz, Image* img){  return img->width;}jintJava_java_awt_Toolkit_imgGetHeight ( JNIEnv* env, jclass clazz, Image* img){  return img->height;}jbooleanJava_java_awt_Toolkit_imgIsMultiFrame ( JNIEnv* env, jclass clazz, Image* img){  return (img->next != 0);}jintJava_java_awt_Toolkit_imgGetLatency ( JNIEnv* env, jclass clazz, Image* img){  return img->latency;}void*Java_java_awt_Toolkit_imgGetNextFrame ( JNIEnv* env, jclass clazz, Image* img ){  return img->next;   /* next in the ring */}

⌨️ 快捷键说明

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