int writeimage(char * name, int xres, int yres, unsigned char *imgdata, 
               int format) {
  if (imgdata == NULL) 
    return IMAGENULLDATA;

  switch (format) {
    case RT_FORMAT_PPM:
      return writeppm(name, xres, yres, imgdata);
    
    case RT_FORMAT_SGIRGB:
      return writergb(name, xres, yres, imgdata);

    case RT_FORMAT_JPEG:
      return writejpeg(name, xres, yres, imgdata);

    case RT_FORMAT_PNG:
      return writepng(name, xres, yres, imgdata);

    case RT_FORMAT_WINBMP:
      return writebmp(name, xres, yres, imgdata);

    case RT_FORMAT_TARGA:
    default:
      return writetga(name, xres, yres, imgdata);       
  } 
}
Example #2
0
File: ctx2png.c Project: ev3dev/grx
/**
 * grx_context_save_to_png:
 * @context: (nullable): Context to be saved or %NULL to use the global context
 * @filename: (type filename): Name of png file
 * @error: pointer to hold an error or %NULL to ignore
 *
 * Dump a context in a PNG file
 *
 * This routine works both in RGB and palette modes
 *
 * Returns: %TRUE on success, otherwise %FALSE
 */
gboolean grx_context_save_to_png(GrxContext *grc, char *pngfn, GError **error)
{
  GrxContext grcaux;
  FILE *f;
  gboolean r;
  
  f = fopen( pngfn,"wb" );
  if (f == NULL) {
    g_set_error(error, G_IO_ERROR, g_io_error_from_errno(errno),
      "Failed to open '%s'", pngfn);
    return FALSE;
  }

  grx_save_current_context( &grcaux );
  if( grc != NULL ) grx_set_current_context( grc );
  r = writepng( f,grc );
  grx_set_current_context( &grcaux );

  fclose( f );

  if (!r) {
    g_set_error(error, GRX_ERROR, GRX_ERROR_PNG_ERROR,
      "Problem with PNG data in '%s'", pngfn);
  }

  return r;
}
Example #3
0
int main() {
  {
  const char* depthfile = "/home/tfogal/data/scenedemo/D01293.png";
  uint8_t* img;
  uint32_t width, height;

  readpng(depthfile, &img, &width, &height);

  std::shared_ptr<void> id(img, free);
  bstream_t info = {
    UNSIGNED_INTEGER,
    sizeof(uint8_t),
    1,
    { width, height, 1, 1 }
  };
  //std::array<uint64_t,4> dims = {{ width, height, 1, 1 }};

#if 0
  gv::Crop c;
  c.set_axis(0);
  c.set_index(320);
  c.set_input(id, info);
  c.execute();
#endif

  gv::Cast cast;
  cast.set_input(id, info);
  bstream_t convert = info;
  convert.width = 2;
  cast.set_otype(convert);
  cast.execute();
  gv::stream upcasted = cast.output(0);

  assert(((const uint16_t*)upcasted.data.get())[0] == 27);

  writepng("test.png", (const uint16_t*)upcasted.data.get(), width, height);
  }

  {
    gv::MinMax mm;
    std::array<double, 12> arr = {{ 9,11,16,42, 19,8,-2,4, -19,86,14,8 }};
    bstream_t arri = {
      FLOAT,
      sizeof(double),
      1,
      { 12, 1, 1, 1 }
    };
    mm.set_input(std::shared_ptr<void>(arr.data(), nonstd::null_deleter()),
                 arri);
    mm.execute();
    gv::stream mmax = mm.output(0);
    const double* dat = static_cast<const double*>(mmax.data.get());
    std::cout << "minmax: (" << dat[0] << ")--(" << dat[1] << ")\n";
  }
  return EXIT_SUCCESS;
}
Example #4
0
void screenshot(const char *basename)
{
	if (basename == NULL)
		basename = "screenshot";
	char name[6 + strlen(basename) + 4 + 4 + 1];
	int count = 0;
	FILE *fp = NULL;
	unsigned char *image;
	int invert_alpha = 0;

	do {
		if (fp)
			fclose(fp);
#if SYS
		sprintf(name, "%s%03d.png", basename, count++);
#else
		sprintf(name, "ms0:/%s%03d.png", basename, count++);
#endif
		fp = fopen(name, "rb");
	} while(fp != NULL && count < 1000);

	if (count == 1000) {
		if (fp)
			fclose(fp);
		return;
	}

	fp = fopen(name, "wb");
	if (fp == NULL)
		return;

	//image = malloc(480*272*4);
	image = memalign(64, 480*272*4);
	glReadPixels(0,0, 480,272, GL_RGBA, GL_UNSIGNED_BYTE, image);

	if (glGetError() != 0)
		goto out;

	/* Check to see if the opacity is 100%. */
	if ((*(unsigned int *)image & 0xff000000) == 0)
	  	invert_alpha = 1;
	writepng(fp, image, 480, 272, invert_alpha);

  out:
	fclose(fp);
	free(image);
}
Example #5
0
int
main(int argc, char **argv)
{
    FILE *in;

    struct meta *imghead;
    uint16_t *imgdata;

    struct ares ar;

    size_t want;

    if(argc != 3) {
        printf("Usage: %s <is2-input> <png-output>\n", argv[0]);
        exit(1);
    }

    in = fopen(argv[1], "rb");
    if(!in) {
        perror("fopen");
        exit(1);
    }

    want = 366;
    imghead = readblob(in, want);
    puts("Header m1");
    hexdump(imghead, want);


    want = 160 * 120 * 2;
    imgdata = readblob(in, want);
    puts("Image");
    hexdump(imgdata, want);


    puts("Analyzing...");
    analyze(&ar, imgdata, 160, 120);

    fumble(&ar, imgdata, 160, 120);

    printf("min %x max %x\n", ar.min, ar.max);

    writepng(argv[2], imgdata, 160, 120);

    return 0;
}
Example #6
0
int GrSaveContextToPng( GrContext *grc, char *pngfn )
{
  GrContext grcaux;
  FILE *f;
  int r;
  
  f = fopen( pngfn,"wb" );
  if( f == NULL ) return -1;

  GrSaveContext( &grcaux );
  if( grc != NULL ) GrSetContext( grc );
  r = writepng( f,grc );
  GrSetContext( &grcaux );

  fclose( f );

  return r;
}
Example #7
0
void
exec(const char* fn, const void* buf, size_t n)
{
  (void)fn;
  if(n == dims[0]*dims[1]*dims[2]*sizeof(float)) {
    float rng[2];
    range((const float*)buf, n/sizeof(float), &rng[0], &rng[1]);
    TRACE(nek, "[%zu] range: [%14.7g %14.7g]", rank(), rng[0], rng[1]);

    if(quant == NULL) {
      quant = calloc(dims[0]*dims[1]*dims[2], sizeof(uint16_t));
    }
    if(fld != 4) { /* 4 is always blank, it seems. */
      memset(quant, 0, dims[0]*dims[1]*dims[2]*sizeof(uint16_t));
      quantize((const float*)buf, n/sizeof(float), rng[0], rng[1], quant);
      char fname[256];
      snprintf(fname, 256, "%zu.fld%zu.png", ts, fld);
      writepng(fname, quant, dims[0], dims[1]);
    }

    next_field();
  }
}
Example #8
0
void do_emu_action(void)
{
	int ret;

	emu_action_old = emu_action;

	switch (emu_action) {
	case SACTION_LOAD_STATE:
		ret = emu_load_state(state_slot);
		snprintf(hud_msg, sizeof(hud_msg), ret == 0 ? "LOADED" : "FAIL!");
		break;
	case SACTION_SAVE_STATE:
		ret = emu_save_state(state_slot);
		snprintf(hud_msg, sizeof(hud_msg), ret == 0 ? "SAVED" : "FAIL!");
		break;
#ifndef NO_FRONTEND
	case SACTION_ENTER_MENU:
		toggle_fast_forward(1);
		menu_loop();
		return;
	case SACTION_NEXT_SSLOT:
		state_slot++;
		if (state_slot > 9)
			state_slot = 0;
		goto do_state_slot;
	case SACTION_PREV_SSLOT:
		state_slot--;
		if (state_slot < 0)
			state_slot = 9;
do_state_slot:
		snprintf(hud_msg, sizeof(hud_msg), "STATE SLOT %d [%s]", state_slot,
			emu_check_state(state_slot) == 0 ? "USED" : "FREE");
		hud_new_msg = 3;
		SysPrintf("* %s\n", hud_msg);
		break;
	case SACTION_TOGGLE_FSKIP:
		pl_rearmed_cbs.fskip_advice = 0;
		pl_rearmed_cbs.frameskip++;
		if (pl_rearmed_cbs.frameskip > 1)
			pl_rearmed_cbs.frameskip = -1;
		snprintf(hud_msg, sizeof(hud_msg), "FRAMESKIP: %s",
			pl_rearmed_cbs.frameskip == -1 ? "AUTO" :
			pl_rearmed_cbs.frameskip == 0 ? "OFF" : "1" );
		plugin_call_rearmed_cbs();
		break;
	case SACTION_SWITCH_DISPMODE:
		pl_switch_dispmode();
		plugin_call_rearmed_cbs();
		if (GPU_open != NULL && GPU_close != NULL) {
			GPU_close();
			GPU_open(&gpuDisp, "PCSX", NULL);
		}
		break;
	case SACTION_FAST_FORWARD:
		toggle_fast_forward(0);
		plugin_call_rearmed_cbs();
		break;
	case SACTION_TOGGLE_FPS:
		if ((g_opts & (OPT_SHOWFPS|OPT_SHOWCPU))
		    == (OPT_SHOWFPS|OPT_SHOWCPU))
			g_opts &= ~(OPT_SHOWFPS|OPT_SHOWCPU);
		else if (g_opts & OPT_SHOWFPS)
			g_opts |= OPT_SHOWCPU;
		else
			g_opts |= OPT_SHOWFPS;
		break;
	case SACTION_TOGGLE_FULLSCREEN:
		plat_target.vout_fullscreen = !plat_target.vout_fullscreen;
		if (GPU_open != NULL && GPU_close != NULL) {
			GPU_close();
			GPU_open(&gpuDisp, "PCSX", NULL);
		}
		break;
	case SACTION_SCREENSHOT:
		{
			char buf[MAXPATHLEN];
			void *scrbuf;
			int w, h, bpp;
			time_t t = time(NULL);
			struct tm *tb = localtime(&t);
			int ti = tb->tm_yday * 1000000 + tb->tm_hour * 10000 +
				tb->tm_min * 100 + tb->tm_sec;

			scrbuf = pl_prepare_screenshot(&w, &h, &bpp);
			get_gameid_filename(buf, sizeof(buf),
				"screenshots/%.32s-%.9s.%d.png", ti);
			ret = -1;
			if (scrbuf != 0 && bpp == 16)
				ret = writepng(buf, scrbuf, w, h);
			if (ret == 0)
				snprintf(hud_msg, sizeof(hud_msg), "SCREENSHOT TAKEN");
			break;
		}
	case SACTION_VOLUME_UP:
	case SACTION_VOLUME_DOWN:
		{
			static int volume;
			plat_target_step_volume(&volume,
				emu_action == SACTION_VOLUME_UP ? 1 : -1);
		}
		return;
	case SACTION_MINIMIZE:
		if (GPU_close != NULL)
			GPU_close();

		plat_minimize();

		if (GPU_open != NULL) {
			ret = GPU_open(&gpuDisp, "PCSX", NULL);
			if (ret)
				SysMessage("GPU_open returned %d", ret);
		}
		return;
#endif
	default:
		return;
	}

	hud_new_msg = 3;
}
Example #9
0
static int
xgraph(HConnect *c)
{
	char *name;
	Hio *hout;
	Memimage *m;
	int dotext;
	Graph g;
	Arg arg;
	char *graph, *a;

	name = hargstr(c, "arg", "");
	if((arg.index = findname(name)) == -1 && strcmp(name, "*") != 0){
		werrstr("unknown name %s", name);
		goto error;
	}
	a = hargstr(c, "arg2", "");
	if(a[0] && (arg.index2 = findname(a)) == -1){
		werrstr("unknown name %s", a);
		goto error;
	}

	g.arg = &arg;
	g.t0 = hargint(c, "t0", -120);
	g.t1 = hargint(c, "t1", 0);
	g.min = hargint(c, "min", -1);
	g.max = hargint(c, "max", -1);
	g.wid = hargint(c, "wid", -1);
	g.ht = hargint(c, "ht", -1);
	dotext = hargstr(c, "text", "")[0] != 0;
	g.fill = hargint(c, "fill", -1);
	
	graph = hargstr(c, "graph", "raw");
	if(strcmp(graph, "raw") == 0)
		g.fn = rawgraph;
	else if(strcmp(graph, "diskbw") == 0)
		g.fn = diskgraph;
	else if(strcmp(graph, "iobw") == 0)
		g.fn = iograph;
	else if(strcmp(graph, "netbw") == 0)
		g.fn = netgraph;
	else if(strcmp(graph, "diff") == 0)
		g.fn = diffgraph;
	else if(strcmp(graph, "pct") == 0)
		g.fn = pctgraph;
	else if(strcmp(graph, "pctdiff") == 0)
		g.fn = pctdiffgraph;
	else if(strcmp(graph, "divdiff") == 0)
		g.fn = divdiffgraph;
	else{
		werrstr("unknown graph %s", graph);
		goto error;
	}

	if(dotext){
		hsettype(c, "text/plain");
		dotextbin(&c->hout, &g);
		hflush(&c->hout);
		return 0;
	}

	m = statgraph(&g);
	if(m == nil)
		goto error;

	if(hsettype(c, "image/png") < 0)
		return -1;
	hout = &c->hout;
	writepng(hout, m);
	qlock(&memdrawlock);
	freememimage(m);
	qunlock(&memdrawlock);
	hflush(hout);
	return 0;

error:
	return herror(c);
}