I have a Xamarin Forms app for android that makes use of custom renderers for images. I have optimized these images to the point where the Bitmaps are only around 600kb in memory with InSampleSize, but I am having issues with pop-in. Namely, when I open a page using these images from my MasterDetailPage, the images load fast, but you can still see them pop into view 100-200ms after the page is displayed.
Here's how I'm loading the pages in my MasterDetailPage
private void Button_Clicked(object sender, EventArgs e)
{
var temp = new NavigationPage(new Pages.HomePage());
Detail = temp;
IsPresented = false;
}
What I would like to do is, if possible, pre-render the page before it is navigated to in the UI to cover up the pop-in, or any other solution that would essentially remove it completely.
Usually in Xamarin Forms people use FFImageLoading library
Xamarin.iOS, Xamarin.Android, Xamarin.Forms and Windows (WinRT, UWP)
support
Configurable disk and memory caching
Multiple image views using the same image source (url, path, resource) will use only one bitmap which is cached in memory (less memory usage)
Deduplication of similar download/load requests. (If 100 similar requests arrive at same time then one real loading will be performed while 99 others
will wait)
Error and loading placeholders support
Images can be automatically downsampled to specified size (less memory usage)
Fluent API which is inspired by Picasso naming SVG & WebP support
Image loading Fade-In animations support
Can retry image downloads (RetryCount, RetryDelay)
Android bitmap optimization. Saves 50% of memory by trying not to use transparency channel when possible.
Transformations support BlurredTransformation CircleTransformation,
RoundedTransformation, CornersTransformation, CropTransformation
ColorSpaceTransformation, GrayscaleTransformation,
SepiaTransformation, TintTransformation FlipTransformation,
RotateTransformation
Supports custom transformations (native platform
ITransformation implementations)
Here you can find some docs
First, add that image in the following path, here I have taken 'Ex' as project name -
Ex/Ex/Ex.Android/Resources/drawable/
If the drawable folder doesn't exist then create it.
Then open visual studio, in the solution explorer find for the drawable folder. Then right-click it and click on add existing item and add all the images you placed in the drawable folder.
Then you can use the image on every page, i.e. -
<Image Source="ImageName.png" />
You can even use this in your pop-up.
Related
i'm developing an App where I can upload images/photos from my phone photo gallery (ios device) to firebase.
Since I want to upload the images/photos in original format (e.g. *.HEIC for pictures taken by an iPhone) I need a plugin which allows me to do that.
Following plugin's I've tried so far:
wechat_assets_picker: this one does what I want to have and returns me a temporary path which contains the the picked image in it's original format (e.g.: /anyPath/tmp/IMG_0024.HEIC). But since I don't really like the UI of wechat_assets_picker, I would like to have sth. else. Maybe more native looking
image_picker: returns a path where the picture is converterd to *.jpeg (e.g.: /anyPath/image_picker_randomNumber.jpg). This is not what I want!
images_picker: same as image_picker... converts the image to *.jpg
image_pickers: similar to wechat_assets_picker but it does what I want. But I don't like the UI either
likk_picker: same - not what I'm looking for
file_picker: same - returns *.jpg
I'm getting tired trying all the plugins.
Is there anyone who can support? Maybe any other way how to pick an image from my gallery in it's original format and quality?
Thanks!
Given the fact that other plugins usually compress HEICs when picking, I would suggest you consider the below solutions:
wechat_assets_picker allows you to build your widgets using delegations. By override build delegates, you can customize each part or the whole part of the interface.
wechat_assets_picker depends on the underlying plugin photo_manager which allows you to build your widgets from the bottom on your own.
I am using VFR reader to display my pdf's. I need to extract the Table of Contents on a button click and display it in a tableview then it should lead to the respective pages while tapping on each.
Parsing the PDF Table of Contents is actually not extremely hard. You can use a tool like Apple's PDF "Voyeur" to see the structure or something like Adobe Acrobat's Preflight Browser:
You see that the "Outline" is a fairly simple tree that can be parsed using the various CGPDF* functions. The challenge here is to also parse the destination/action type. PDF doesn't make things too easy and doesn't give you a page number, instead usually you will find a linked named destination. This can be resolved by cross-referencing another table, it's best to look this up in the PDF spec. This is of course just one of the options, it can also be that the destination is one of the > 10 action types that rage from GoTo over named actions (e.g. Next Page) to JavaScript (e.g. this.pageNum = x). In the image above you see a classical GoTo action with the longer string being the named reference.
There are also some other special cases, notably for older latex documents and some pages from the PDF 1.1 spec that did things a bit differently, so be careful about implementing all corner-cases of the PDF spec to not get surprises later on.
Outlines sometimes also include URI actions, so at least implement that type as well. And they can also have font styles and color, so you won't ever get bored. Been there, done that in our commercial PSPDFKit PDF SDK for iOS and Android.
I was asked to develop a game called "Flag Quiz" in which the player have to guess the correct name of the flag that appears in the middle of the screen.
Of course I have a lot of pictures (221 flags) and I have to put them inside the program because, when the button Play is pressed, the program has to pick randomly 10 of these flags.
Problem
I was thinking to use an ImageList but the flags are 480x311 and so Delphi asks me to separate the picutre in 30 different bitmaps. Can I do anything about this?
My idea, to avoid that problem, was the following (although I think that it's not very good): create 221 TPicture components (invisible to the user of course) and load in each of them a picture of a flag.
I'd prefer not using the last idea I had. Do you know any improvement?
This sort of problem is simply not suited to the form designer. You want to store 221 images, and managing that in the IDE will be horrible. Once you've got them all in you won't be able to see them readily because they will be base 16 encoded in a .dfm file. Under revision control it will be a mess because you won't be able to change individual images in a manageable and traceable manner.
The accepted way to do this is to use resources. If it were me, I'd arrange for my images to have predicatable names. For instance, flag1, flag2, etc. I'd generate a resource script (.rc) that listed all the flags. I'd compile that resource script to a compiled resource (.res) which is linked to the executable. I'd have the resource script and the image files committed to revision control.
Then at runtime you have a single TImage control to display the flag. Every time you need a new image you load it with TResourceStream, and push it into the TImage control.
Devexpress has a Componnect named cximagecolletion that you can put your images on it and save and load images from/to file
or you can save all flags in small access db and load it when you need using tadodataset
there is no doubt that if you put your images direct on your form your dfm grow very high and so you Get Into trouble
Personally I would store each file as an image in a dedicated subdirectory, using the country as a file name. Then I would read the subdirectory file names on entry to the program (so I have a list of countries that I can randomly choose from) and use TImage.LoadFromFile to display the flag. This is far easier to extend than using a resource file (IMHO).
I'm using PSPDFKit in my app. I want to load remote images async with the framework, cause there are both images and normal files in my app. I have tried convert imageData into PDFDataProvider, which cannot be Asynchronous. Does anyone have ideas?
Author of PSPDFKit here. Please contact us for feature requests directly, we only rarely monitor StackOverflow - that's not the right platform to provide support for commercial products.
That being said, the PSPDFViewController is designed to present PDF files - we don't have immediate plans to add support for other file types.
I'm writing an application using as3 and adobe air that loads external SWF files and plays them internally in the application. The container works just fine with android and the animation of the external swf file is very cool.
However, on the iOS (iPad 2), it runs very slow as if its playing only 1 frame per second.
Is there anyway at all to make it play faster.
My application configuration is as follow:
<initialWindow>
<autoOrients>false</autoOrients>
<aspectRatio>landscape</aspectRatio>
<renderMode>gpu</renderMode>
<fullScreen>false</fullScreen>
<visible>true</visible>
<softKeyboardBehavior>none</softKeyboardBehavior>
</initialWindow>
This is the part of code where I load the external swf:
public function set url(value:String):void
{
_url = value;
object.source = File.applicationDirectory.resolvePath(value).url;
object.addEventListener(Event.COMPLETE , onLoaded);
}
protected function onLoaded(event:Event):void
{
object.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
protected function onEnterFrame(event:Event):void
{
if((object.content as Object).currentFrameLabel == "stop")
(object.content as Object).stop();
}
I also tried to comment the Enter frame event listener but nothing changed.
Thanks in advance.
Edit:
I figured out something that is very strange actually. When I run the application from the application with the Fast configuration, it runs fast. But when I publish it or use the Standard option while running it runs really slow.
Tested with AIR 3.2
try setting your render mode to direct:
<renderMode>direct</renderMode>
Remember, when you are rendering exclusively to the GPU, it will slow things down if you are rendering animations. Although rendering to the GPU is fast, allocating Video Memory to the GPU is slow. If you render exclusivity to the GPU, on every frame, the video memory will need to be updated.
Another thing is that all vectors will be rasterized so some things will render pixelated.
A couple of things:
You aren't allowed to load SWFs that have any code in them, in AIR for iOS. This is forbidden by Apple.
You should only use swf at most as a library of graphics / resources when compiling for iOS. If a movieclip inside has stop(); on one of the frames, then this counts as an 'addFrameScript()' under the hood, which means that SWF contains ActionScript.
I suggest if you need functionality as such, create a list of predefined behaviours to be compiled into your main app, then run these behaviours based on the type or name of asset you are instantiating from your SWF library, attaching them at runtime.
Besides, if you are doing this to allow updates -- or the ability to modify the app, post-release, then you may as well compile it into the release build, and just republish next time you want an update to the app. This will help your ranking in the app store to some extent, and remove a lot of versioning issues down the line.