JNIEXPORT jobject JNICALL Java_net_sourceforge_zbar_Image_getData (JNIEnv *env, jobject obj) { jobject data = (*env)->GetObjectField(env, obj, Image_data); if(data) return(data); zbar_image_t *zimg = GET_PEER(Image, obj); data = zbar_image_get_userdata(zimg); if(data) return(data); unsigned long rawlen = zbar_image_get_data_length(zimg); const void *raw = zbar_image_get_data(zimg); if(!rawlen || !raw) return(NULL); data = (*env)->NewByteArray(env, rawlen); if(!data) return(NULL); (*env)->SetByteArrayRegion(env, data, 0, rawlen, raw); (*env)->SetObjectField(env, obj, Image_data, data); return(data); }
int main (int argc, char **argv) { zbar_set_verbosity(32); zbar_processor_t *proc = zbar_processor_create(0); assert(proc); if(zbar_processor_init(proc, NULL, 1)) return(2); zbar_image_t *img = zbar_image_create(); zbar_image_set_size(img, 8, 8); zbar_image_set_format(img, fourcc('J','P','E','G')); zbar_image_set_data(img, jpeg, sizeof(jpeg), NULL); zbar_image_t *test = zbar_image_convert(img, fourcc('Y','8','0','0')); if(!test) return(2); printf("converted: %d x %d (%lx) %08lx\n", zbar_image_get_width(test), zbar_image_get_height(test), zbar_image_get_data_length(test), zbar_image_get_format(test)); if(zbar_process_image(proc, test) < 0) return(3); if(zbar_processor_set_visible(proc, 1)) return(4); zbar_processor_user_wait(proc, -1); return(0); }
int zbarImage_validate (zbarImage *img) { if(!zbar_image_get_width(img->zimg) || !zbar_image_get_height(img->zimg) || !zbar_image_get_data(img->zimg) || !zbar_image_get_data_length(img->zimg)) { PyErr_Format(PyExc_ValueError, "image size and data must be defined"); return(-1); } return(0); }
static PyObject* image_get_data (zbarImage *self, void *closure) { assert(zbar_image_get_userdata(self->zimg) == self); if(self->data) { Py_INCREF(self->data); return(self->data); } const char *data = zbar_image_get_data(self->zimg); unsigned long datalen = zbar_image_get_data_length(self->zimg); if(!data || !datalen) { Py_INCREF(Py_None); return(Py_None); } self->data = PyBuffer_FromMemory((void*)data, datalen); Py_INCREF(self->data); return(self->data); }