int sgl_open_camera(char *interface_name, CameraSgl *camera) { IMAQdxSession session_id; IMAQdxError error = 0; int display_win_num; int i = 0; error = IMAQdxOpenCamera (interface_name, IMAQdxCameraControlModeController, &session_id); if (error) { goto ERROR_MSG; } imaqGetWindowHandle (&display_win_num); // OK,则返回正确的CameraSgl camera->session_id = session_id; camera->display_win_num = display_win_num; camera->visible = TRUE; size_t size = sizeof(camera->interface_name); memset(camera->interface_name, 0, size); strncpy(camera->interface_name, interface_name, size); for (i = 0; i < camera->camera_count; i++) { if (0 == strcmp(interface_name, camera->info.camera_info[i].InterfaceName)) { camera->info.info_id = i; } } // 获取相机的信息 IMAQdxGetAttribute(camera->session_id, IMAQdxAttributeWidth, IMAQdxValueTypeU32, &camera->info.width); IMAQdxGetAttribute(camera->session_id, IMAQdxAttributeHeight, IMAQdxValueTypeU32, &camera->info.height); IMAQdxGetAttribute(camera->session_id, IMAQdxAttributeBayerGainR, IMAQdxValueTypeF64, &camera->info.R); IMAQdxGetAttribute(camera->session_id, IMAQdxAttributeBayerGainG, IMAQdxValueTypeF64, &camera->info.G); IMAQdxGetAttribute(camera->session_id, IMAQdxAttributeBayerGainB, IMAQdxValueTypeF64, &camera->info.B); sgl_init_camera_data(camera, IMAQ_IMAGE_RGB); // 注册回调接口 //IMAQdxRegisterFrameDoneEvent (camera->session_id, 1, frame_done_callback, NULL); sgl_set_acquisition_mode(camera, 1); return 0; ERROR_MSG: sgl_camera_message_error(error, camera->error_callback); return -1; }
void Camera::DumpAttrs() { //IMAQdxEnumerateAttributes(IMAQdxSession id, IMAQdxAttributeInformation attributeInformationArray[], uInt32* count, const char* root); IMAQdxAttributeInformation attributeInformationArray[300]; uInt32 count; IMAQdxEnumerateAttributes(session, NULL, &count, ""); union { uInt32 a; uInt64 b; double c; char *d; unsigned int e;bool f; char y[256]; // just in case } x; printf("IMAQdxEnumerateAttributes - there are %lu attributes", count); if (count > sizeof(attributeInformationArray) / sizeof(attributeInformationArray[0])) { printf(" -- that's too many to enumerate\n"); } else printf("\n"); IMAQdxEnumerateAttributes(session, attributeInformationArray, &count, ""); for (uInt32 i = 0; i != count; i++) { printf(" attr[%lu] is %s, type %u, writeable %lu, value=", i, attributeInformationArray[i].Name, attributeInformationArray[i].Type, attributeInformationArray[i].Writable); IMAQdxGetAttribute(session, attributeInformationArray[i].Name, (IMAQdxValueType) attributeInformationArray[i].Type, &x); switch (attributeInformationArray[i].Type) { case IMAQdxValueTypeU32: printf("%lu\n", x.a); break; case IMAQdxValueTypeI64: printf("%llu\n", x.b); break; case IMAQdxValueTypeF64: printf("%f\n", x.c); break; case IMAQdxValueTypeString: //printf("%s\n", x.d); printf("%s\n", x.y); break; case IMAQdxValueTypeEnumItem: printf("%u\n", x.e); break; case IMAQdxValueTypeBool: printf("%d\n", x.f); break; default: printf("%x\n", x.e); break; } } }