Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
	}
}
Ejemplo n.º 4
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);
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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);
}  
Ejemplo n.º 8
0
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);
    }
  }
}