コード例 #1
0
ファイル: ppi.c プロジェクト: amdonov/OpenEBTS
int getc_ppi_wsq(int *oppi, unsigned char *idata, const int ilen)
{
   int ret;
   int ppi;
   char *value;
   NISTCOM *nistcom;

   /* Get ppi from NISTCOM, if one exists ... */
   if((ret = getc_nistcom_wsq(&nistcom, idata, ilen)))
      return(ret);
   if(nistcom != (NISTCOM *)NULL){
      if((ret = extractfet_ret(&value, NCM_PPI, nistcom))){
         freefet(nistcom);
         return(ret);
      }
      if(value != (char *)NULL){
         ppi = atoi(value);
         free(value);
      }
      /* Otherwise, PPI not in NISTCOM, so ppi = -1. */
      else
         ppi = -1;
      freefet(nistcom);
   }
   /* Otherwise, NISTCOM does NOT exist, so ppi = -1. */
   else
      ppi = -1;

   *oppi = ppi;

   return(0);
}
コード例 #2
0
ファイル: dwsq.c プロジェクト: chendong/ffpis_img
int main( int argc, char **argv)
{
   int ret;
   int rawflag;                   /* raw input data or Ihead image */
   char *outext;                  /* ouput file extension */
   char *ifile, ofile[MAXPATHLEN];  /* file names */
   int ilen;
   int width, height;             /* image parameters */
   int depth, ppi;
   unsigned char *idata, *odata;  /* image pointers */
   int lossyflag;                 /* data loss flag */
   NISTCOM *nistcom;              /* NIST Comment */
   char *ppi_str;


   procargs(argc, argv, &outext, &ifile, &rawflag);

   ret = read_raw_from_filesize(ifile, &idata, &ilen);
   if(ret)
      exit(ret);

   ret = wsq_decode_mem(&odata, &width, &height, &depth, &ppi, &lossyflag, idata, ilen);
   if(ret){
      free(idata);
      exit(ret);
   }

   if(debug > 1)
      fprintf(stderr, "Image pixmap constructed\n");

   fileroot(ifile);
   sprintf(ofile, "%s.%s", ifile, NCM_EXT);

   /* Get NISTCOM from compressed data file */
   ret = getc_nistcom_wsq(&nistcom, idata, ilen);
   if(ret){
      free(idata);
      exit(ret);
   }
   free(idata);
   /* WSQ decoder always returns ppi=-1, so believe PPI in NISTCOM, */
   /* if it already exists. */
   ppi_str = (char *)NULL;
   if(nistcom != (NISTCOM *)NULL){
      ret = extractfet_ret(&ppi_str, NCM_PPI, nistcom);
      if(ret){
         free(odata);
         freefet(nistcom);
         exit(ret);
      }
   }
   if(ppi_str != (char *)NULL){
      ppi = atoi(ppi_str);
      free(ppi_str);
   }

   /* Combine NISTCOM with image features */
   ret = combine_wsq_nistcom(&nistcom, width, height, depth, ppi, lossyflag,
		   0.0 /* will be deleted next */);
   if(ret){
     free(odata);
     if(nistcom != (NISTCOM *)NULL)
        freefet(nistcom);
     exit(ret);
   }
   ret = del_wsq_nistcom(nistcom);
   if(ret){
     free(odata);
     freefet(nistcom);
     exit(ret);
   }

   /* Write NISTCOM */
   ret = writefetfile_ret(ofile, nistcom);
   if(ret){
     free(odata);
     freefet(nistcom);
     exit(ret);
   }
   freefet(nistcom);

   /* Write decoded image file. */
   sprintf(ofile, "%s.%s", ifile, outext);
   ret = write_raw_or_ihead(!rawflag, ofile, odata, width, height, depth, ppi);
   if(ret){
      free(odata);
      exit(ret);
   }
   free(odata);

   if(debug > 1)
      fprintf(stdout, "Image pixmap written to %s\n", ofile);

   exit(0);
}
コード例 #3
0
ファイル: j2wsq.c プロジェクト: E3V3A/JMRTD
/**
 * Decodes an encoded WSQ byte array to a buffered image.
 * Based on dwsq.c.
 *
 * @param in a byte array holding the encoded WSQ image
 *
 * @return a buffered image
 */
JNIEXPORT jobject JNICALL Java_org_jmrtd_imageio_WSQImageReader_decodeWSQ
 (JNIEnv *env, jobject obj, jbyteArray in, jobject metadata) {
   /* Java classes and objects */
  jclass    ioexceptionClazz = (*env)->FindClass(env, "java/io/IOException");
  jclass    metadataClazz = (*env)->GetObjectClass(env, metadata);
  jclass    imgClazz = (*env)->FindClass(env, "java/awt/image/BufferedImage");
  jclass    writableRasterClazz = (*env)->FindClass(env, "java/awt/image/WritableRaster");
  jmethodID metadataSetPropertyMethodID = (*env)->GetMethodID(env, metadataClazz, "setProperty", "(Ljava/lang/String;Ljava/lang/String;)Z");  
  jmethodID imgInitMethodID = (*env)->GetMethodID(env, imgClazz, "<init>", "(III)V");
  jmethodID imgGetRasterMethodID = (*env)->GetMethodID(env, imgClazz, "getRaster", "()Ljava/awt/image/WritableRaster;");
  jmethodID rasterSetDataElementsMethodID = (*env)->GetMethodID(env, writableRasterClazz, "setDataElements", "(IIIILjava/lang/Object;)V");
  jfieldID  imgTypeByteGrayFieldID = (*env)->GetStaticFieldID(env, imgClazz, "TYPE_BYTE_GRAY", "I");
  jint      TYPE_BYTE_GRAY = (*env)->GetStaticIntField(env, imgClazz, imgTypeByteGrayFieldID);
  jobject   imgObject, rasterObject;    
  
  /* WSQ-Compressed input buffer */
  unsigned char *idata = (unsigned char*)(*env)->GetByteArrayElements(env, in, JNI_FALSE);
  int idata_len = (*env)->GetArrayLength(env, in);
  
  /* Uncompressed Pixel Buffer */
  unsigned char *odata = NULL;
  jbyteArray jodata = NULL;
  /* Image parameters */
  NISTCOM *nistcom = NULL;
  int width, height, depth, ppi, lossy; 
  int wsq_decore_ret, nistcom_ret;
  /* Parse WSQ Image */
  wsq_decore_ret = wsq_decode_mem(&odata, &width, &height, &depth, &ppi, &lossy, idata, idata_len);
  if (wsq_decore_ret==0) {
    jodata = (*env)->NewByteArray(env, width*height);
    (*env)->SetByteArrayRegion(env, jodata, 0, width*height, (jbyte*)odata);
    free(odata);
    odata = NULL;
  } else {
    (*env)->ReleaseByteArrayElements(env, in, (jbyte*)idata, JNI_FALSE);
    (*env)->ThrowNew(env, ioexceptionClazz, "(In native C code) function wsq_decode_mem failed");
    return NULL;
  }
  
  
  /* WSQ Metadata */
  
  nistcom_ret    = getc_nistcom_wsq(&nistcom, idata, idata_len);
  if (nistcom_ret==0 && nistcom != NULL) {
    int i;
    for (i=0; i<nistcom->num; i++) {
      if (nistcom->names[i]) {
        (*env)->CallBooleanMethod(
          env, 
          metadata, 
          metadataSetPropertyMethodID,
          (*env)->NewStringUTF(env, nistcom->names[i]), 
          nistcom->values[i] ? (*env)->NewStringUTF(env, nistcom->values[i]) : NULL );
      }
    }
    freefet(nistcom);
  }
  (*env)->ReleaseByteArrayElements(env, in, (jbyte*)idata, JNI_FALSE);
  
  
  /* Construct a BufferedImage from the byte array:
      BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
      WritableRaster raster = img.getRaster();
      raster.setDataElements(0, 0, width, height, decodedBytes); 
  */
  imgObject = (*env)->NewObject(env, imgClazz, imgInitMethodID, width, height, TYPE_BYTE_GRAY);
  rasterObject = (*env)->CallObjectMethod(env, imgObject, imgGetRasterMethodID);
  (*env)->CallVoidMethod(env, rasterObject, rasterSetDataElementsMethodID, 0, 0, width, height, jodata);
 
  return imgObject;
}