void VaultImageNode::StuffImage (plMipmap * src, int dstType) { hsRAMStream ramStream; bool compressSuccess = false; switch (dstType) { case kJPEG: plJPEG::Instance().SetWriteQuality(70/*percent*/); compressSuccess = plJPEG::Instance().WriteToStream(&ramStream, src); break; case kPNG: compressSuccess = plPNG::Instance().WriteToStream(&ramStream, src); break; default: break; } if (compressSuccess) { unsigned bytes = ramStream.GetEOF(); uint8_t * buffer = (uint8_t *)malloc(bytes); ramStream.CopyToMem(buffer); SetImageData(buffer, bytes); SetImageType(dstType); free(buffer); } else { SetImageData(nil, 0); SetImageType(kNone); } }
bool Thin3DTexture::LoadFromFileData(const uint8_t *data, size_t dataSize, T3DImageType type) { int width[16], height[16]; uint8_t *image[16] = { nullptr }; int num_levels; int zim_flags; T3DImageFormat fmt; if (!LoadTextureLevels(data, dataSize, type, width, height, &num_levels, &fmt, image, &zim_flags)) { return false; } Create(LINEAR2D, fmt, width[0], height[0], 1, num_levels); for (int i = 0; i < num_levels; i++) { if (image[i]) { SetImageData(0, 0, 0, width[i], height[i], 1, i, width[i] * 4, image[i]); free(image[i]); } else { ELOG("Missing image level %i", i); } } Finalize(zim_flags); return true; }
int main() { glfwInit(); window = glfwCreateWindow(IMAGE_WIDTH,IMAGE_HEIGHT,"MTF",NULL,NULL); if (!window) return 100; LoadConstants(); glfwSetCursorPosCallback(window,glfwMouse); glfwSetWindowSizeCallback(window,glfwResize); glfwSetKeyCallback(window,glfwKeyboard); glfwMakeContextCurrent(window); glClearColor(1.0,0.0,0.0,1.0); glViewport(0,0,IMAGE_WIDTH,IMAGE_HEIGHT); CreateImage(IMAGE_WIDTH,IMAGE_HEIGHT); CreateMTFImage(); SetImageData(IMAGE_WIDTH,IMAGE_HEIGHT,image_data); while(true) { glClear(GL_COLOR_BUFFER_BIT); DrawImage(); glfwSwapBuffers(window); glfwPollEvents(); if (glfwWindowShouldClose(window)) return 0; } }
void glfwResize(GLFWwindow* window,int x,int y) { IMAGE_WIDTH = x; IMAGE_HEIGHT = y; glViewport(0,0,IMAGE_WIDTH,IMAGE_HEIGHT); glClear(GL_COLOR_BUFFER_BIT); glfwSwapBuffers(window); LoadConstants(); CreateImage(IMAGE_WIDTH,IMAGE_HEIGHT); CreateMTFImage(); SetImageData(IMAGE_WIDTH,IMAGE_HEIGHT,image_data); }
void glfwKeyboard(GLFWwindow* window,int key,int scan,int action,int mod) { if (action != GLFW_PRESS) return; if (key == GLFW_KEY_UP) { K3 -= 0.001f; goto update; } else if (key == GLFW_KEY_DOWN) { K3 += 0.001f; goto update; } return; update: printf("K3 = %f\n",K3); CreateMTFImage(); SetImageData(IMAGE_WIDTH,IMAGE_HEIGHT,image_data); }
bool Thin3DTexture::LoadFromFileData(const uint8_t *data, size_t dataSize, T3DImageType type) { int width[16], height[16], zim_flags; uint8_t *image[16] = { nullptr }; int num_levels = LoadZIMPtr(data, dataSize, width, height, &zim_flags, image); if (num_levels == 0) { return false; } T3DImageFormat fmt = ZimToT3DFormat(zim_flags & ZIM_FORMAT_MASK); // TODO: Cube map / 3D texture / texture array support Create(LINEAR2D, fmt, width[0], height[0], 1, num_levels); for (int i = 0; i < num_levels; i++) { SetImageData(0, 0, 0, width[i], height[i], 1, i, width[i] * 4, image[i]); free(image[i]); } Finalize(zim_flags); return true; }
void CameraServer::SetImage(Image const *image) { unsigned int dataSize = 0; uint8_t* data = (uint8_t*) imaqFlatten(image, IMAQ_FLATTEN_IMAGE, IMAQ_COMPRESSION_JPEG, 10 * m_quality, &dataSize); // If we're using a HW camera, then find the start of the data bool hwClient; { // Make a local copy of the hwClient variable so that we can safely use it. std::unique_lock<std::recursive_mutex> lock(m_imageMutex); hwClient = m_hwClient; } unsigned int start = 0; if (hwClient) { while (start < dataSize - 1) { if (data[start] == 0xFF && data[start + 1] == 0xD8) break; else start++; } } dataSize -= start; wpi_assert(dataSize > 2); SetImageData(data, dataSize, start, true); }
void CameraServer::AutoCapture() { Image* frame = imaqCreateImage(IMAQ_IMAGE_RGB, 0); while (true) { bool hwClient; uint8_t* data = nullptr; { std::unique_lock<std::recursive_mutex> lock(m_imageMutex); hwClient = m_hwClient; if (hwClient) { data = m_dataPool.back(); m_dataPool.pop_back(); } } if (hwClient) { unsigned int size = m_camera->GetImageData(data, kMaxImageSize); SetImageData(data, size); } else { m_camera->GetImage(frame); SetImage(frame); } } }