I am developing an application which can edit images. At the start of my program the user sees a list of folders that contain images. Instead of showing default folder icon i am showing an image from folder. I have database where i store path to images and information about which image is displaying in the list near the folder name. Every time when my application starts it takes a lot of time to load a scaled down image into memory and then display it, especially when there are a lot of folders with images and for each i need to load its icon. I have read this article http://developer.android.com/training/displaying-bitmaps/index.html and every time when my app starts i am scaling down every image.
May be the best way in this situation is to resize (not scale down) every image and then store it in the database? But i have read that this is not good.
So i want to ask an advice of how to do in this case? And i also need an advice of how to optimize displaying images in the Android Galllery widget to make it scrolling more faster. Thank you very much!
1 Never store images in database. It is inefficient and slow.
2 There are several image loading libraries that solve the same problem. My favorites are Picasso and Universal Image Loader
Related
My CodenameOne app is mainly intended to be the iOS counterpart of an existing Android app. It is for older devices, in fact, as soon as possible, or in the future, a Swift app is going to replace it for OS 14>.
I need some customised icons and I have the svg code for it.
Initially I had to use the Flamingo tool, that converts svg files in Java classes.
I used it like
ScaleImageButton appButton=new ScaleImageButton(new AppIcon().scaled(doubleButtonSize,doubleButtonSize).toImage());
It is cumbersome but it does not even work on iOS.
So now I resorted to create png images for every icon in every dpi level, as it can also be done on Android.
I renamed the files so they follow the standard I think it is proposed in CodenameOne.
The possible names are:
verylow.png
low.png
medium.png
high.png
veryhigh.png
560.png
hd.png
2hd.png
4k.png
In the end it has to be used like
Image icon = theme.getImage("icon.png");
It seems that the images can be imported in the project in more than one way.
I was said to include them in the theme.
According to the CN1 developer guide I have to set the size for each.
If I import them as a whole (selecting the folder or selecting all images and hitting the "Open" button) in the theme editor a dialog appears with all wrong sizes (but they resemble a particular set of choice, although very unlikely).
They are not always the same sizes but neither they are defaulted according to the provided set of images.
I provide images as 24px, 36px, 48px, 72px, 96px, 144px, 192px, 288px, 384px for normal size icons, and also I provide double sized images for double size icons in my app (the values are not doubled as expected).
I also have to check "Square image" and "Preserve aspect ratio" options (my images are already square).
Then the strangest part is that there is a percentage, I see it is 20 for example.
The caption reads "will affect all entries". I understood that it is to scale images, that is what a developer just do not want, unless the developer has wrong sizes, but still proportioned among themselves, that cannot be the case I think.
However I do not need any scaling, the images are right as they are. I created them on purpose.
The developer guide is not enough clear to me.
So I am asking
is it right to tweak the wrong size to match the right ones, and what about the percentage?
This specific UI is a bit out of date by now and wasn't used much even when it was added. Most users opted to do desktop scaling for multi images.
The scale option is designed to scale down from a high resolution image on the desktop. You don't want/need that.
You don't need to edit the file. Just make sure to turn on the XML team mode and make sure your images use the right file names. Then once you save the images will appear in the resource file.
I suggest adding a multi-image using the standard method of add in the menu. Then replacing all the generated images with your copies and reopening the file, then saving again (the last save is important as it will override the res file).
I am trying to show images from URL.
In my code I used, imageLoader.get function but loading images are too slow.
imageLoader.get(c.getImgUrl(), ImageLoader.getImageListener(holder.mImage, R.drawable.img_loading, R.drawable.img_loading)); //450x200 px images.
Then I tried to compress but the problem is still alive.
imageLoader.get(c.getImgUrl(), ImageLoader.getImageListener(holder.mImage, R.drawable.img_loading, R.drawable.img_loading),225,100);
Besides, images are not shown in correct order firstly. When I scroll down(I show 20 images at the same time with recycler view), at first glance it shows images in wrong order. After 3-4 seconds, it shows correctly. Images changes automatically if I scroll down.
As a result, How can I solve my problem? How to speed up? How to show in correct order at first glance?
You can use Glide for that which is far better in memory consumption than compared to other libraries. Also, it provides the diskCacheStrategy, imageResizing, centerCropping, placeholder for the image if not available and can set error image or message if error loading image occurs.
Below is the latest dependency you can include in you app level build.gradle file:
implementation 'com.github.bumptech.glide:glide:4.7.1'
you can use Picasso image library easy to use
http://square.github.io/picasso/
I am trying to make animated Gif Splash screen in java netbeans but it doesn't works.. so I use jpg or PNG files it works .. I want to use gif animated file in splash screen I am using -splash:src/Images/sspp.PNG in VM options.. please tell some solutions so I am able to use animated splash screen.
I think you'll find that the problem comes down to two things...
1.Using the command line parameter (-splash), Java expects the image to be a file on the file system, whereas the manifest file expects it to be an embedded resource.
2.Java doesn't seem capable of playing optimised gifs, that is gifs whose frames represent the difference between the last and current frame, instead of a complete image (as far as the splash screen goes).
I tried using
and
The first image failed, but the second worked, the difference, as near as I can tell, is the first is optimized and the second is not...
I want to make my Universal Image Loader project work as fast as Quickpic. In order to do so, I want to start caching my images before they're ever shown on screen. Right now they only load when I can see them. Any ideas? I'm using their gridview
I wanted to load java images with some effects like we have in power point like blinds or appear in Java swing when user clicks on the image.
I have these specific questions in mind:
1.Is there a way to do this in Java?
2.Also how will this behave when the image to load is huge like 25 Mega Pixel?
3.If we are dealing with large images being switched, what mechanism should be used for incorporating images in the application?
Thanks,
Sandeep
1.Is there a way to do this in Java?
Yes, but it won't be with a single command or anything like that. Unless you find a library for this, you'll have to code it up manually.
To do animations like these I suggest you have a look at SwingWorkers.
2.Also how will this behave when the image to load is huge like 25 Mega Pixel?
25 mega pixel is quite large. It depends on your computer of course but if you code it reasonable well it should work fine.
3.If we are dealing with large images being switched, what mechanism should be used for incorporating images in the application?
Unless you really want the program to zoom into the details of the image, I suggest you shrink them immediately after loading, so your drawing-routines can work with them efficiently.
You can experiment with your target images using ImageJ. I routinely use it to manipulate images having scores of megapixels containing 8-, 16- and 32-bit data.