On Sun, 24 Feb 2013 11:49:35 +0800 (CST) 哆啦比猫 <cj...@126.com> said:
> In fact, the image data is generated on the fly(I'm writing an procedural > image generator). Internally, they are stored as SIMD floating point vectors, > with 4 elements, rgbx, where x is an undefined value and each ranged from 0 > to 1. I chose PPM because the file format is SIMPLE. if ua re already generating the data in code.. just then provide ARGB data direct as i gave an example. it's massively more efficient. > Can I disable async preload of elm_image? Must I touch the lower level thing? no you can't disable it. :) > Anyway, I'll learn more about the low-level stuff. The lack of documents > really sucks. BTW, here is what I'm writing: http://cjprods.org/ipu/ , > licensed under The MIT License. the lover level is almost as easy. tyhats the thing about efl... it has so many layers, you'll get lost. the evas image object layer is not that low level it's not immediate mode rendering (like cairo, canvas2d in html ot webgl, or opengl). it's still high level compared to what most peolpe thnik of as "low level". scaling and blending is all handled for you as is stacking and redraw. you just provide width, height, alpha flag and argb pixel values. :) (note its premultiplied alpha argb). thats rather neat (the app you're making) :) also.. if u stuff the argb pixel data into an evas image object.. evas can save the image for u in whatever format u like (png, jpg, tiff, eet supported). > >On Fri, 22 Feb 2013 16:03:57 +0800 (CST) 哆啦比猫 <cj...@126.com> said: > > > > >> What I want to do is: > >> > >> > >> // show result in Image Stack (a table, in fact) > >> elm_table_clear(stack, true); > >> for (int i=ipu_stack_length()-1; i>=0; i--) { > >> image = elm_image_add(win); > >> elm_image_resizable_set(image, 0, 0); > >> evas_object_size_hint_min_set(image, 256, 256); // all the images are > >> 256x256 evas_object_size_hint_padding_set(image, 10, 10, 10, 0); > > > >dont set min size (and padding may or may not be used/honored by widgets. > >they all pretty much only honor min/max size. anything else is optional). if > >you want direct control like this - drop down a layer to evas image objects. > >don't use elm image objects. elm objects set min/max size hints for you and > >will just fight with you on the sizing. > > > >> ppm = ipu_ppm_get(&ppm_size); // get the image from top of ipu's stack, in > >> PPM format elm_image_memfile_set(image, ppm, ppm_size, "ppm", NULL); > >> ipu_ppm_free(ppm); > > > >just so you know... loading images from memory is less efficient than from > >files on disk. ALSO be aware since you are using a ppm... its in memory > >UNCOMPRESSED as RGB data... that's about as inefficient as u'd get... you are > >BETTER off having it as a jpeg maybe or a png even... in memory - and even > >better off having it separate on disk. if you must have the data compiled > >into your executable... convert to ARGB premultiplied format (32bits - 1 int > >per pixel) and then just have into on width, height and alpha mask and then > >set the argb pointer directly on the image... to do that you will have to > >drop down to evas image objects. like this: > > > >int mydata[] = { > > 0x00000000, 0x88888888, > > 0xffff0000, 0xffffffff > >}; > >int mywidth = 2; > >int myheight = 2; > >Eina_Bool myalpha = EINA_TRUE; > > > >Evas_Object *img; > > > >img = evas_object_image_filled_add(evas_object_evas_get(win)); > >evas_object_image_size_set(img, mywidth, myheight); > >evas_object_image_alpha_set(img myalpha); > >evas_object_image_data_set(img, mydata); > > > >... convert your image into some c data array declaration as above. this will > >save memory (the data will be used directly from your executable and not > >duplicated if possible). it just isnt compressed, so disk-space will be ugly > >if these images get big and plentiful in your code. in the end as i said - i > >advise putting them into actual data files. there are ways to pack them all > >into a single resource file (eet for example - this is actually what edje > >files are). > > > >> elm_table_pack(stack, image, 0, i, 1, 1); > >> evas_object_show(image); > >> > >> ipu_ignore(); // pop the top of ipu's stack > >> } > >> > >> But the table "flashes", then show the images. I don't want the "flash" > >> when reset the content of the table. I've tried elm_win_norender_push() and > >> elm_win_norender_pop(), but seems not working as expected. I've also tried > >> creating a new table, then set it to the content of it's container, not > >> work neither. > > > >it flashes because elm_image automatically enables the async preload feature > >of evas - it means evas only synchronously checks the image header and > >doesn't decode the data immediately. it decodes it in a background thread > >and THEN when its decoded, elm_image will show the image. until then its > >hiddden. this avoids blocking and waiting, but means that you get this > >behaviour. higher level widgets do this - they layer on top extra behaviour. > >it is often handy/useful, but in your case probably isn't what you want, so > >drop down to a more manual layer if that's what you want. > > > >n.b. you can create your own composite objects via smart objects. this lets > >you create intelligent objects with exactly the kind of behaviour you desire. > >terminology does this with "media" objects. it uses this to do smart stuff > >like turn smooth scaling and and off while the object keeps resizing (to > >make zoom animations smoother), and then when it stops for a little while it > >turns smooth scaling on again. the same trick is used to deal with vector > >data files (ps/pdf/svg) by re-loading the image when resizing stops but > >telling it to render at the "current pixel size" and thus have perfect > >correct scaled data, but having fast bitmap stretching in between. > > > >> -- > >> Where there is a hacker, there is art. > >> ------------------------------------------------------------------------------ > >> Everyone hates slow websites. So do we. > >> Make your web apps faster with AppDynamics > >> Download AppDynamics Lite for free today: > >> http://p.sf.net/sfu/appdyn_d2d_feb > >> _______________________________________________ > >> enlightenment-devel mailing list > >> enlightenment-devel@lists.sourceforge.net > >> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > >> > > > > > >-- > >------------- Codito, ergo sum - "I code, therefore I am" -------------- > >The Rasterman (Carsten Haitzler) ras...@rasterman.com > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > enlightenment-devel mailing list > enlightenment-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_feb _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel