Load PNGs from assets using Android NDK

Many developers appear to embed libpng with their NDK project in order to decode PNGs. While libpng does offer great flexibility, the amount of code necessary to decode an image is surprisingly high, and the additional work needed to maintain a libpng build means that most of the time, using the system’s decoding routines is perfectly reasonable.

But wait, isn’t the NDK for C++ development only? True, but usually we are still running in a virtual machine that has access to a large panel of high-level utility libraries. This article actually demonstrates a broader, useful technique I call return-to-JVM that you can use for other purposes than simply PNG loading.

I suggest putting your PNG files in the assets directory of your application, so that they can be accessed by path.

First, let’s decide of a Java class and object that will act as a PNG factory and manager for us. Let’s call it PngManager:

import android.content.res.AssetManager;

public class PngManager
{
    private AssetManager amgr;

    public Bitmap open(String path)
    {
        try
        {
            return BitmapFactory.decodeStream(amgr.open(path));
        }
        catch (Exception e) { }
        return null;
    }

    public int getWidth(Bitmap bmp) { return bmp.getWidth(); }
    public int getHeight(Bitmap bmp) { return bmp.getHeight(); }

    public void getPixels(Bitmap bmp, int[] pixels)
    {
        int w = bmp.getWidth();
        int h = bmp.getHeight();
        bmp.getPixels(pixels, 0, w, 0, 0, w, h);
    }

    public void close(Bitmap bmp)
    {
        bmp.recycle();
    }
}

Now to load the PNG from the C++ part of the program, use the following code:

jobject g_pngmgr;
JNIEnv *g_env;

/* ... */

char const *path = "images/myimage.png";

jclass cls = g_env->GetObjectClass(g_pngmgr);
jmethodID mid;

/* Ask the PNG manager for a bitmap */
mid = g_env->GetMethodID(cls, "open",
                         "(Ljava/lang/String;)Landroid/graphics/Bitmap;");
jstring name = g_env->NewStringUTF(path);
jobject png = g_env->CallObjectMethod(g_pngmgr, mid, name);
g_env->DeleteLocalRef(name);
g_env->NewGlobalRef(png);

/* Get image dimensions */
mid = g_env->GetMethodID(cls, "getWidth", "(Landroid/graphics/Bitmap;)I");
int width = g_env->CallIntMethod(g_pngmgr, mid, png);
mid = g_env->GetMethodID(cls, "getHeight", "(Landroid/graphics/Bitmap;)I");
int height = g_env->CallIntMethod(g_pngmgr, mid, png);

/* Get pixels */
jintArray array = g_env->NewIntArray(width * height);
g_env->NewGlobalRef(array);
mid = g_env->GetMethodID(cls, "getPixels", "(Landroid/graphics/Bitmap;[I)V");
g_env->CallVoidMethod(g_pngmgr, mid, png, array);

jint *pixels = g_env->GetIntArrayElements(array, 0);

Now do anything you want with the pixels, for instance bind them to a texture.

And to release the bitmap when finished:

g_env->ReleaseIntArrayElements(array, pixels, 0);
g_env->DeleteGlobalRef(array);

/* Free image */
mid = g_env->GetMethodID(cls, "close", "(Landroid/graphics/Bitmap;)V");
g_env->CallVoidMethod(g_pngmgr, mid, png);
g_env->DeleteGlobalRef(png);

This will not work out of the box. There are a few last things to do, which will hugely depend on your global application architecture and are thus left as an exercise to the reader:

  • Store an AssetManager object in PngManager::amgr before the first call to open() is made (for instance by calling Activity::getAssets() upon application initialisation).
  • Store in g_env a valid JNIEnv * value (the JNI environment is the first argument to all JNI methods), either by remembering it or by using jvm->AttachCurrentThread().
  • Store in g_pngmgr a valid jobject handle to a PngManager instance (for instance by calling a JNI method with the instance as an argument).
  • Error checking was totally omitted from the code for the sake of clarity.
  • Some of the dynamically retrieved variables could benefit from being cached.

I hope this can prove helpful!

For a C++-only solution to this problem, see Load pngs from assets in NDK by Bill Hsu.

  • Posted: 2011-03-02 04:02 (Updated: 2011-03-04 14:52)
  • Author: sam
  • Categories: android code tip

Comments

1. pablolupo@gmail.com -- 2011-08-12 16:11

Hi Sam, before nothing thank you so much for writing this article and I'm sorry for my english :)

I'm having troubles when I try to call my native function passing my PngManager instance as an argument. The c++ function prototype is this:

JNIEXPORT void JNICALL Java_com_ndkpackage_ndkproject_GameRenderer_nativeInit(JNIEnv* env, jclass cls, jobject* pngManager)

Java declaration: private static native void nativeInit(Object pngLoader);

At Run-time I have this error on LogCat: WARN/dalvikvm(254): No implementation found for native Lcom/ndkpackage/ndkproject/GameRenderer;.nativeInit (Lcom/ndkpackage/ndkproject/PngLoader;)V

Could you help me with this? Thanks in advance. Lupo

4. anonymous -- 2011-08-14 00:19

Fixed. Just send an instance of the PngManager from Java and received it as an jobject pointer as I said before, but I forget to modify the c++ native function prototype... Sorry.

Anyway, I still having problems at this line:

jobject png = g_env->CallObjectMethod(g_pngmgr, mid, name);

png always is null. Any sugestion? Thanks. Lupo

5. sam -- 2011-08-14 10:09

@Lupo: if png is null and there was no crash, it means the open() method was properly called, but it failed for some reason. You will have to hook some error reporting in open(), right here:

           return BitmapFactory.decodeStream(amgr.open(path));
        }
        catch (Exception e) { /* error reporting goes here */ }
        return null;
    }
6. anonymous -- 2012-06-11 10:40

I am wondering if it is possible to load the bitmap as a texture into openGL in the java and have it then available to use in NDK openGL?

7. moggiozzi -- 2012-08-21 20:53

Hi Sam. I try do it with native-activity project in ndk samples. I add package myapp.mypack and add to package PngManager class. But when i try get jclass for PngManager in android_main function i get NULL. My code:

void android_main(struct android_app* state) {
	env = state->activity->env;
	jvm = state->activity->vm;
	jvm->AttachCurrentThread(&env, NULL);
	jclass fileClass = env->FindClass("myapp/mypack/PngManager");
	if(fileClass==NULL)
		LOGI("fileClass is NULL");

If I'm trying to, for example, "java/io/File", I get non-null pointer. It would be nice if you suggested solution.

8. ZeDuS -- 2013-09-02 20:11

"I am wondering if it is possible to load the bitmap as a texture into openGL in the java and have it then available to use in NDK openGL? "

Of course you can, since textures in GLES (1/2) are basically just IDs, you can pass them as int back to native code. I've managed to do it with a "special" texture (camera preview) and I'm sure it's possible with "simple" textures.

9. titmouse001@gmail.com -- 2015-05-14 00:21

Thanks - works like a dream. One small thing... Don't forget to clean up that cls instance as a last call, it's possible to run out of refs after about 512 calls. env->DeleteLocalRef( cls);

This link talks about how to make it global rather than calling the above delete each time... http://journals.ecs.soton.ac.uk/java/tutorial/native1.1/implementing/refs.html

10. anonymous -- 2016-09-13 08:25

Hi,

Thank you for the awesome tutorial. I am having problems with applying this method to multiple bitmap files though. I keep getting dvmHeapBitmapScanWalk(HeapBitmap*, void (*)(Object*, void*, void*), void*) error.

I wonder if you can provide an example of loading multiple files.

Cheers

185. BernardBax -- 2016-10-20 21:55

Essay on best teacher http://www.thegreatnewsinc.com/Critical-Thinking-Paper - Critical Thinking Paper, Buy research papers Best essay review services http://youngwillstone.com/edit-college-essays-online - Edit college essays online, Academic report writing Essay writing courses http://verybestphotos.com/statics-homework-help - Statics homework help, College paper writing Need help for doing my assignment http://www.thegreatnewsinc.com/write-my-paper-write-my-paper-for-$10-or-less - Write my paper write my paper for $10 or less, Writing lab reports Easiest way to write an essay http://verybestphotos.com/need-help-writing-a-essay - Need help writing a essay, English homework help

271. subanal -- 2016-11-27 00:43

raK4GL There is visibly a bunch to realize about this. I believe you made certain nice points in features also.

368. useful source -- 2017-01-31 18:23

ER8FcF Thanks a lot for the article. Keep writing.

369. that site -- 2017-02-01 00:33

8uEuaG written. In my opinion, it might bring your website a little bit more interesting.

370. anonymous -- 2018-01-16 07:57

What a good post. I have very good knowledge about the Java. You have shared very good post with us and shared very good points which practically makes it work. To get trolley wheels Click here http://uktrolleywheels.uk/

371. roblox hack -- 2018-01-25 09:18

hello friend.I found A lot of interesting information here. <a href="http://freerobux.spruz.com/">roblox hack</a>.i have agreed this website is very nice just us the app thanks for sharing it.

372. Jennings -- 2018-03-18 05:43

This is indeed a very useful tutorial. I really like it. For Android, you can get the movie hd apk latest version. Download the movies hd apk 2018 variant for smartphones. Install updated apk film hd version and enjoy hd movies. After that, it is easy to have movies apk on your device. Thank you for this informative guide. Keep going.

373. anonymous -- 2018-03-20 13:32

Get expert Question & Answer Dumps PDF Online. We Provide latest IT Certification HPE0-S51 Exams PDF for preparation Study Guide Test Practice for Success in exams. This is an online education portal

374. anonymous -- 2018-03-26 20:43

The new version of android NDK is not allowing the old data of PNG to store in it, it is showing error message while trying to upload the data into it. I even checked in their http://best-essay-writing-service.reviews blog site if I can get any tutorial or patch file regarding this failure in app.

375. anonymous -- 2018-05-17 18:07

Michael M.Calbertis the chairman and Todd Vasos is the CEO of the company. The Dollar General provides us with clothing, Cleaning Supplies, Home Decors, Health and Beauty, Aids, Pet Supplies, Toys, Seasonal Items and Grocery. Dollar General gave the wonderful opportunity called http://dgcustomerfirstcom.info/dgcustomerfirst/.

376. anonymous -- 2018-05-21 13:24

If you are looking best sources and study material of MB6-896

dumps to prepare and pass all exams, I advised visiting the best platform certificationssoul. Try out https://www.certificationssoul.com/microsoft/mb6-896-exam-questions.html

377. RichardTDavidson -- 2018-06-05 08:31

HTTP Injector APK Download https://httpinjector.co/

378. anonymous -- 2018-06-16 19:09

whatsapp mods like whatsapp plus , gbwhatsapp, yowhatsapp and ogwhatsapp on apk trendz : https://www.apktrendz.co

379. anonymous -- 2018-07-05 11:09

Hello guys do you know that going through a review of websites will give you much insight about it which you can’t know by simply visiting it,Here is the allassignmenthelp.com Reviews that reviews the website and provides you the best website . http://assignmentshelpreview.com/allassignmenthelp-com-reviews/

380. Assignment help -- 2018-07-10 08:28

Some students are suffering from distress, whereas some suffer from eustress in life. Low scores in academics, examination, pent-up assignments or other academic issues can stress out the students. To resolve such type of problems, they can take assignment help from the online services at their last minute. Getting help from these services are beneficial as they provide quality work in quick time. Therefore you can have a hike in your grades quite easily. https://www.allassignmenthelp.com/java-assignment-help.html https://www.allassignmenthelp.com/computer-programming-assignment-help.html

381. Marketing Research Homework Help -- 2018-07-13 12:44

Dissertation Guidance Provides Quality Online Dissertation Help For Students. http://themarketingresearch.com

382. PM Assignment Help -- 2018-07-13 13:44

Only Professional Writers Can Make This Kind Of Material, Cheers http://projectmanagementhelp.net

383. anonymous -- 2018-07-16 18:22

Macy’s is one of the largest stores that mainly operates in the United States. It has a web portal for its employees which is named ‘Macys Insite – Employee Connection’. It is specially designed for the employees who are working at Macy’s. https://myinsite.info/

384. mancakessuch -- 2018-09-04 12:26

But wait, isn’t the NDK for C++ development only? True, but usually we are still running in a virtual machine that has access to a large panel of high-level utility libraries. This article actually demonstrates a broader, useful technique I call return-to-JVM that you can use for other purposes than simply PNG loading.

https://happywheels3d.com/

385. Text Chemistry -- 2018-09-22 18:16

I think I have never seen such blogs ever before that has complete things with all details which I want. So kindly update this ever for us. Text Chemistry

386. Snoring -- 2018-09-22 18:45

It is perfect time to make some plans for the future and it is time to be happy. I've read this post and if I could I desire to suggest you some interesting things or suggestions. Perhaps you could write next articles referring to this article. I want to read more things about it! Snoring

387. Stomach Ache -- 2018-09-22 18:45

You might comment on the order system of the blog. You should chat it's splendid. Your blog audit would swell up your visitors. I was very pleased to find this site.I wanted to thank you for this great read!! Stomach Ache

388. anonymous -- 2018-09-22 18:47

The writer is enthusiastic about purchasing wooden furniture on the web and his exploration about best wooden furniture has brought about the arrangement of this article. Gout

389. anonymous -- 2018-09-22 18:49

You actually make it look so easy with your performance but I find this matter to be actually something which I think I would never comprehend. It seems too complicated and extremely broad for me. I'm looking forward for your next post, I’ll try to get the hang of it! Low Carb Foods

390. anonymous -- 2018-09-22 18:51

They're produced by the very best degree developers who will be distinguished for your polo dress creating. You'll find polo Ron Lauren inside exclusive array which include particular classes for men, women. Boost Your Blood Levels

391. anonymous -- 2018-09-22 18:53

I would like to thank you for the efforts you have made in writing this article. I am hoping the same best work from you in the future as well.. Lower Your Cholesterol Levels

392. anonymous -- 2018-09-22 18:54

This is a fantastic website , thanks for sharing. Blood Clot

393. anonymous -- 2018-09-24 04:08

Happy Wheels Racing games - https://happywheels24.com

394. aber -- 2018-10-10 07:51

Even though the coding is very confusing, it's fun to deal with. http://www.unblockedgames6.com

395. anonymous -- 2018-10-14 10:01

Awesome and interesting article. Great things you've always shared with us. Thanks. Just continue composing this kind of post. acquariologia http://www.massimograndeacquari.it/

396. anonymous -- 2018-10-16 13:05

This is really a nice and informative, containing all information and also has a great impact on the new technology. Thanks for sharing it Enjoy Mexico Villa Rentals https://enjoymexico.net/villa-rentals/

397. anonymous -- 2018-10-17 13:35

This is a great inspiring article.I am pretty much pleased with your good work.You put really very helpful information... Enjoy Mexico Villa Rentals in Punta Mita https://enjoymexico.net/punta-mita-villa-rentals/

398. anonymous -- 2018-10-20 15:40

The website is looking bit flashy and it catches the visitors eyes. Design is pretty simple and a good user friendly interface. <a href="http://whistlergrandofficial.doodlekit.com/">Whistler Grand</a>

399. anonymous -- 2018-10-30 13:51

Excellent Blog! I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. I wanted to thank you for this websites! Thanks for sharing. Great websites! Church on the hill mcminnville

400. anonymous -- 2018-10-31 12:25

Wonderful illustrated information. I thank you about that. No doubt it will be very useful for my future projects. Would like to see some other posts on the same subject! Bonrollen kaufen http://kassenrollen2.spruz.com/

401. anonymous -- 2018-11-01 07:53

Law assignment help in understanding how legal theories and concepts can be enforced in the real world. It seeks to guide us about prospective-reform on the laws across courts, policing, businesses, legal firms, and security agencies.

Visit us: -

https://www.myassignmentservices.com/ https://www.myassignmentservices.com/law-assignment-service.html

402. anonymous -- 2018-11-01 14:00

The information you have posted is very useful. The sites you have referred was good. Thanks for sharing... hdmi encoder https://www.provideoinstruments.com/IPTV-Streaming_c_39.html

403. anonymous -- 2018-11-05 12:19

Wonderful illustrated information. I thank you about that. No doubt it will be very useful for my future projects. Would like to see some other posts on the same subject! Will Grundy http://willgrundyrealestate.com

404. anonymous -- 2018-11-06 11:55

The information you have posted is very useful. The sites you have referred was good. Thanks for sharing... Vertz Marketing https://vertzmarketing.com

405. anonymous -- 2018-11-08 13:49

Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. Florida Tax Lawyers http://floridataxlawyers.net

406. anonymous -- 2018-11-11 14:00

Whatsapp 2019 later will appear soon as a Whatsapp version is the latest. As the development time Whatsapp is always correcting its performance. So that users more easily apply it. Apply the Whatsapp version update will certainly be more profitable users.Some of the reasons people love the application Whatsapp is because of the features provided by this one application.

http://www.whatsapp2019.net/

407. anonymous -- 2018-11-12 17:06

Wonderful illustrated information. I thank you about that. No doubt it will be very useful for my future projects. Would like to see some other posts on the same subject! jual cctv http://www.lumbatech.com/

408. anonymous -- 2018-11-13 12:38

I really appreciate the kind of topics you post here. Thanks for sharing us a great information that is actually helpful. Good day! immo https://wirtschaft.com/immobilien

409. Amelia -- 2018-11-15 10:50

Thank you so much for this useful info. http://www.unblockedgamesmania.com

410. raman -- 2018-11-17 08:45

GBWhatsapp apk Download Latest Version 2018. Download Latest GB Whatsapp for Use 2 Whatsapp in One Mobile. <a href="http://appgbdownload.com/">GBWhatsApp App</a> . http://appgbdownload.com

411. mjjones733@gmail.com -- 2018-11-17 11:29

If you are still in a dilemma, you could ask your teacher for some guidance, or you can take Assignment helpfrom different assignment writing service providers. There you can find many online experts, who are all set to help you in your assignment. The proper outline followed by them will give you an idea of how to make your assignment look more presentable and attractive. https://www.allassignmenthelp.com

412. anonymous -- 2018-11-17 15:14

I found your this post while searching for some related information on blog search...Its a good post..keep posting and update the information. Arbeit https://wirtschaft.com/jobboerse

413. maxdroid -- 2018-11-18 11:39

I love android phone, you can find many attractive games on my website. https://maxdroid.net/

414. anonymous -- 2018-11-23 08:49

How am I able to bring together a simple software the use of Android NDK? I am used to using gcc, I would like to compile a program to use on my tablet, I even have compiled a software using the https://www.trueassignmenthelp.co.uk/ C4droid compiler and I have established it the usage of a terminal emulator. I need to do the identical however i need to compile the binary using my mac and android NDK.

415. anonymous -- 2018-11-25 12:30

This blog is so nice to me. I will keep on coming here again and again. Visit my link as well.. see this https://helpwithmystudentloan.com/

416. Metal fence Gates -- 2018-11-27 20:34

We make and deliver the best in custom gates, From ornamental gates to barrier gates we make them and deliver them quickly. We have or own custom welding shop and do all the work ourselves. We love what we do and so will you, call us for a free quote on any type of metal gates. Custom made wrought iron gates from our custom Shop. We deliver you small or large decorative garden gates to very large custom double driveway gates. You dream it we will build it, we make Amazing Gate. Metal fence Gates

417. anonymous -- 2018-12-01 17:28

Downloaf shell shockers full version.

418. Robert -- 2018-12-01 18:48

hank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! kyocera inkjet printheads

419. anonymous -- 2018-12-02 09:13

At L.S Fencing & Metal Work . We are a family owned and operated fencing company with years of experience and top notch quality.Our customers are our number one priority and we go above and beyond to make sure they are satisfied. There is no job too big or too small. We are a fully licensed and insured company with many references and are happy to stand by our one year warranty on all parts and labor. We have the equipment and know how to do the job right the first time. Abbotsford Chain link Fencing

420. anonymous -- 2018-12-02 10:02

Looking for custom product packaging? https://www.customdeluxeboxes.com/ offers quality custom product boxes in USA and Canada. Get printed boxes no minimum with free shipping and design support. Choosing the right custom product packaging design gives you an edge over your competitors. This is why investing in product packaging and design elements can be worth spending every penny.

421. anonymous -- 2018-12-08 09:53

Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. Mark Statts http://www.markstatts.com/

422. anonymous -- 2018-12-10 15:31

Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post. Kevenides Law https://kevenideslaw.com/

423. anonymous -- 2018-12-11 04:47

This is a good article. This post provides real quality information. I will definitely look at it. Really helpful tips are provided here. thank you very much. Keep up the good work. read more :https://hotmailsignaz.com/delete-microsoft-account/

424. FRIV -- 2018-12-14 06:48
425. anonymous -- 2018-12-16 07:44

If you are still in a dilemma, you could ask your teacher for some guidance, or you can take Assignment helpfrom different assignment writing service providers. There you can find many online experts, who are all set to help you in your assignment. The proper outline followed by them will give you an idea of how to make your assignment look more presentable and attractive. http://dubang.tech/

426. jennykryt53@gmail.com -- 2018-12-17 08:40

Very nice and informative article. <a href="https://itubeapk.pro/download-itube-studio-for-mac-windows/">itube studio software for pc</a>

427. Jenny -- 2018-12-17 08:43

Good to read such a nice post. <a href="https://gbwhatsapp.pro/moded-whatsapp-plus-apk-download/">whatsapp plus apk</a>

428. anonymous -- 2018-12-20 11:10

This was a really great contest and hopefully I can attend the next one. It was alot of fun and I really enjoyed myself.. mehr Informationen finden Sie hier https://grundeigentuemer.com

429. anonymous -- 2018-12-23 12:39

Thanks for sharing this article! Very well written https://www.abcassignmenthelp.com/

430. anonymous -- 2018-12-24 15:21

Thanks for taking the time to discuss that, I feel strongly about this and so really like getting to know more on this kind of field. Do you mind updating your blog post with additional insight? It should be really useful for all of us. Hongkong Pools https://livedrawhongkong0.weebly.com/

431. anonymous -- 2018-12-31 21:07

I am happy to find your distinguished way of writing the post. Now you make it easy for me to understand and implement the concept. Thank you for the post. Platin Verwendung https://grundeigentumer.weebly.com/

435. anonymous -- 2019-01-07 12:26

You completed a few fine points there. I did a search on the subject and found nearly all persons will go along with with your blog. jetzt mehr lesen https://spielhoellen.com/

436. anonymous -- 2019-01-08 20:26

Awesome blog. I enjoyed reading your articles. This is truly a great read for me. I have bookmarked it and I am looking forward to reading new articles. Keep up the good work! linen sheets http://www.still-life-studio.co.uk/a-linen-duvet-cover-disclosed/

437. anonymous -- 2019-01-11 08:25

I clicked to your website and it’s quite interesting. I see so many things that I haven’t known before. Thank you for submitted your website. USPS Tracking

438. anonymous -- 2019-01-12 11:13

Thanks for sharing this information. I really like your blog post very much. You have really shared a informative and interesting blog post with people.. Flat Panel http://candcimaging.com

439. anonymous -- 2019-01-13 09:51

The website is looking bit flashy and it catches the visitors eyes. Design is pretty simple and a good user friendly interface. Club Control http://clubcontrol.net

440. anonymous -- 2019-01-13 19:56

Thanks for the nice blog. It was very useful for me. I'm happy I found this blog. Thank you for sharing with us,I too always learn something new from your post. Michigan Bankruptcy http://michigan-bankruptcy.org

441. anonymous -- 2019-01-20 11:44

Best work you have done, this online website is really cool with great facts. official site https://nflstream.io/

442. anonymous -- 2019-01-21 11:23

I am happy to find this post very useful for me, as it contains lot of information. I always prefer to read the quality content and this thing I found in you post. Thanks for sharing. try this out https://tennisstream.me/

443. hollywood fashion jackets -- 2019-01-21 13:26

It is one of the most excellent blog in these types of blogs in my opinion. Each word of your platform is very informative. https://americasuits.com/

444. anonymous -- 2019-01-22 12:16

I just found this blog and have high hopes for it to continue. Keep up the great work, its hard to find good ones. I have added try this site https://livef1.stream/ try this site https://livef1.stream/ o my favorites. Thank You.

445. anonymous -- 2019-01-22 12:37

I am very much pleased with the contents you have mentioned. I wanted to thank you for this great article. site here https://livemotgp.stream/

446. kelvin nox -- 2019-01-29 16:59

this code is so much useful for me and also working properly but still, there is some minor problem in it. last time I buy codes online and still suffering from a problem on How to use a Visa Card online. https://creditcardsecurity.puzl.com/_news/How-to-use-a-Visa-Card-online/143410

447. punisher season 2 jacket -- 2019-02-01 13:26

Thank u for sharing a helpfull information with us! I really appreciate your blog and it is excellent to see your blog.. thank u very much. https://americasuits.com/punisher-season-2--jon-bernthal-jacket

448. anonymous -- 2019-02-10 10:33

Love what you're doing here guys, keep it up!.. globe lighting https://www.premiereltg.com/cbpl36-entryway-lighting.html

449. anonymous -- 2019-02-16 08:29

Helpful code. Are you a college student and seeking for your android assignment provider? Visit our website and know about our student-friendly service features to get quality writing for android assignment by programmer expert.

https://www.globalassignmenthelp.com.au/android-assignment-help

450. katedaisy -- 2019-02-19 07:41

Excellent post. I was checking continuously this blog and I'm impressed! Very useful information particularly the last part, I care for such info a lot. I was seeking this certain info for a long time. Thank you and good luck.router login

451. anonymous -- 2019-02-20 12:19
453. anonymous -- 2019-02-20 12:23
454. anonymous -- 2019-02-24 21:14

This is a great post. I like this topic.This site has lots of advantage.I found many interesting things from this site. It helps me in many ways.Thanks for posting this again. Vollständiger Bericht ... https://gaertnern.com/

455. anonymous -- 2019-02-26 13:59

I admit, I have not been on this web page in a long time... however it was another joy to see It is such an important topic and ignored by so many, even professionals. professionals. I thank you to help making people more aware of possible issues. https://buypapercheap.com/ https://buypapercheap.my-free.website/

456. anonymous -- 2019-02-26 21:53

i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future.. bookkeeping services Barry https://accountedforltd.page.tl/

457. anonymous -- 2019-02-28 19:31

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business. video production company https://www.designrush.com/trends/successful-video-campaign

458. anonymous -- 2019-03-02 21:26

I love the way you write and share your niche! Very interesting and different! Keep it coming! Vollständiger Bericht ... https://aussergewöhnliches.com

459. anonymous -- 2019-03-03 20:44

i read a lot of stuff and i found that the way of writing to clearifing that exactly want to say was very good so i am impressed and ilike to come again in future.. jetzt hier lesen ... http://moeblieren.com/

460. anonymous -- 2019-03-03 21:37

Amazing man the reading was quite interesting. <a href="https://bomberfriendsmodapk.net">Bomber Friends MOD APK</a>

461. anonymous -- 2019-03-04 18:55

I’ve been searching for some decent stuff on the subject and haven't had any luck up until this point, You just got a new biggest fan!.. jetzt mehr lesen ... http://whatlauraloves.de/

462. anonymous -- 2019-03-12 13:56

This article gives the light in which we can observe the reality. This is very nice one and gives indepth information. Thanks for this nice article. Artificial grass wholesale http://globalsynturf.sitey.me/

463. anonymous -- 2019-03-12 20:55

Hello, I have browsed most of your posts. This post is probably where I got the most useful information for my research. Thanks for posting, maybe we can see more on this. Are you aware of any other websites on this subject. Video Production Virginia Beach http://bryantdigital.sitey.me/

464. anonymous -- 2019-03-14 21:07

I have not any word to appreciate this post.....Really i am impressed from this post....the person who create this post it was a great human..thanks for shared this with us. Read This https://butcherblockco.com

465. Alex Vargas -- 2019-03-23 14:38

Gostaria de agradecer o esforço de voces em escrever esse artigo. muito bom aprender a montar um negocio com o https://formulanegocioonline.top

466. anonymous -- 2019-04-01 10:59

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, Derecho De Sucesiones https://www.torrijosabogados.com/claves-derecho-de-sucesiones/

467. anonymous -- 2019-04-04 04:41

The additional work needed to maintain a libpng build means that most of the time. http://www.rapidascent.com.au/Newsletter/oak.asp Oakley Sunglasses Australia

468. anonymous -- 2019-04-07 15:07

I have read your article, it is very informative and helpful for me.I admire the valuable information you offer in your articles. Thanks for posting it.. Normandy Holiday Homes http://normandyholidayhomes.info

469. anonymous -- 2019-04-07 21:55

I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, i am always look for people to check out my web site. Soccer Predictions http://www.insiderbet.tips/

470. anonymous -- 2019-04-11 20:35

This is such a great resource that you are providing and you give it away for free. go to my blog https://www.techinexpert.com/

471. anonymous -- 2019-04-14 15:43

Positive site, where did u come up with the information on this posting?I have read a few of the articles on your website now, and I really like your style. Thanks a million and please keep up the effective work. Counterpunch.org https://counterpunch.shutterfly.com/

472. anonymous -- 2019-04-16 17:33

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business. moving service singapore https://safe2movesg.livejournal.com/

473. anonymous -- 2019-04-26 09:25

123.hp.com/envy 5544

This post is extremely easy to peruse and acknowledge without forgetting any subtle elements. Incredible work!

474. anonymous -- 2019-04-26 10:56

192.168.1.250

Awesome article, it was exceptionally helpful! I simply began in this and I'm becoming more acquainted with it better! Cheers, keep doing awesome!

475. anonymous -- 2019-04-27 15:11

Your music is amazing. You have some very talented artists. I wish you the best of success. Synthetic turf https://www.globalsynturf.com/

476. anonymous -- 2019-04-27 15:56

Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. best wordpress seo plugin https://plugin.squirrly.co

477. anonymous -- 2019-04-30 16:09

I high appreciate this post. It’s hard to find the good from the bad sometimes, but I think you’ve nailed it! would you mind updating your blog with more information? Software https://www.multisoft.com/

478. Disha@gmail.com -- 2019-05-02 02:16

I just visit Google Play Gift card Code generator online and it works. You should check this. https://www.podomatic.com/podcasts/giftcardgen/episodes/2019-04-27T15_12_45-07_00

479. anonymous -- 2019-05-04 10:36

This is very educational content and written well for a change. It's nice to see that some people still understand how to write a quality post! my conveyancing specialist https://www.myconveyancingspecialist.com

480. anonymous -- 2019-05-05 13:21

Thanks for sharing nice information with us. i like your post and all you share with us is uptodate and quite informative, i would like to bookmark the page so i can come here again to read you, as you have done a wonderful job. times connection https://timesconnection.com/

481. anonymous -- 2019-05-06 09:03

Do you want to enjoy the premium content on your Amazon Fire TV Stick for free? Then you need to jailbreak firestick, read complete step https://jailbreak-firestick.com/ here.

482. anonymous -- 2019-05-06 11:22

This is such a great resource that you are providing and you give it away for free. fire retardant spray for fabric https://natfire.com/product-category/fire-retardant-spray/

483. anonymous -- 2019-05-07 23:02

You really made a great work. I am regularly visiting your blog to find more interesting and informative articles. https://aadharhelplline.home.blog

484. anonymous -- 2019-05-07 23:53

It is really great work but I need help on Working Xbox Live games https://www.vox.com/users/kcgen69

485. anonymous -- 2019-05-08 00:44

Thanks for sharing nice information with us. I like your post and all you share with us is up to date and quite informative, I would like to bookmark the page so I can come here again to read you, as you have done a wonderful job. times connection. I want to buy the most costly Xbox live gift card of 100$. https://giftcardgenerator.teachable.com/p/xbox-live-gift-card-code-generator

486. anonymous -- 2019-05-08 02:05

Hello, its, a really good article posted by you. I also write a blog related to Xbox Live http://www.divephotoguide.com/user/xboxlivecodesgen

487. anonymous -- 2019-05-13 19:35

Great posts! I am actually getting ready to across this information, is very helpful my friend. Also great blog here with all of the valuable information you have. Keep up the good work you are doing here.

https://www.technoabout.com/newasiantv/ https://www.technoabout.com/tamilrockers-movies/

488. anonymous -- 2019-05-13 19:36

Great posts! I am actually getting ready to across this information, is very helpful my friend. https://khatrimaza.asia

489. anonymous -- 2019-05-15 10:08

This blog is so nice to me. I will keep on coming here again and again. Visit my link as well.. Shinken Publications http://www.shinkenpublicrelations.com/

490. anonymous -- 2019-05-15 17:32

This is such a great resource that you are providing and you give it away for free. google seo https://storage.googleapis.com/happykoala.co.uk/happykoalaseoagency.html

491. anonymous -- 2019-05-18 12:31

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, anime clothes https://shopsoulart.com/

492. henry carl -- 2019-05-18 17:57

Incredible post! I am really getting prepared to over this data, is exceptionally useful my companion. Likewise extraordinary blog here with the majority of the significant data you have. https://googleplaycards.gamerlaunch.com/users/blog/5193966/1916728/15-legit-ways-to-earn-google-play-credit/?gid=577150

493. anonymous -- 2019-05-19 09:54

You are providing very informative post. https://cupcake2048.com/2048-cupcake/ is an excellent puzzle game.

494. anonymous -- 2019-05-19 13:52

Thanks for posting this info. I just want to let you know that I just check out your site and I find it very interesting and informative. I can't wait to read lots of your posts. https://www.timdhodges.ca/digital-marketing/search-engine-optimization/

495. anonymous -- 2019-05-22 19:31

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, hail damage https://www.staydryroofing.com/roof-repair/hail-damage-repair/

496. AOL Customer Service -- 2019-05-23 08:27

AOL is an American global innovation organization which is known for giving various web administrations. AOL Gold is a phenomenal administration presented by AOL and is utilized by a large number of individuals everywhere throughout the world. Its drawing in highlights and administrations make it increasingly mainstream among web clients. Utilizing AOL offers access to different extraordinary highlights, for example, schedule, plan for the day, visit, video talk, contact associations and so on. It continues adding new advances and administrations to its officially existing items to improve the exhibition. Visit for more :- https://jigefy.com/ https://jigefy.com/aol-customer-service/ https://jigefy.com/aol-desktop-gold-download-support/ https://jigefy.com/at-t-customer-care-usa/ https://jigefy.com/change-gmail-password-support/ https://jigefy.com/facebook-customer-service/ https://jigefy.com/facebook-phone-number/ https://jigefy.com/garmin-gps-customer-service/ https://jigefy.com/gmail-contact-number/ https://jigefy.com/gmail-customer-care-usa/

497. AOL Customer Service -- 2019-05-23 08:27

AOL is an American global innovation organization which is known for giving various web administrations. AOL Gold is a phenomenal administration presented by AOL and is utilized by a large number of individuals everywhere throughout the world. Its drawing in highlights and administrations make it increasingly mainstream among web clients. Utilizing AOL offers access to different extraordinary highlights, for example, schedule, plan for the day, visit, video talk, contact associations and so on. It continues adding new advances and administrations to its officially existing items to improve the exhibition. Visit for more :- https://jigefy.com/ https://jigefy.com/aol-customer-service/ https://jigefy.com/aol-desktop-gold-download-support/ https://jigefy.com/at-t-customer-care-usa/ https://jigefy.com/change-gmail-password-support/ https://jigefy.com/facebook-customer-service/ https://jigefy.com/facebook-phone-number/ https://jigefy.com/garmin-gps-customer-service/ https://jigefy.com/gmail-contact-number/ https://jigefy.com/gmail-customer-care-usa/

499. anonymous -- 2019-05-26 19:30

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business. SEO9 https://seo9.de/

500. anonymous -- 2019-05-26 21:24

Excellent information on your blog, thank you for taking the time to share with us. Amazing insight you have on this, it's nice to find a website that details so much information about different artists. Times connection https://timesconnection.com/

501. anonymous -- 2019-05-27 18:45

People want to earn and make money in every possible way. Some works day and night to give a better life to their family, some of them work smart to live a luxurious life. No one wants to save money and those who want to save, don't know the proper to save money. The easiest way you can save money is to by applying promo codes and coupons. Read more https://couponspirit.com/uber-coupon-existing-user https://couponspirit.com

502. henry carl -- 2019-05-29 06:24

But wait, isn’t the NDK for C++ development only? True, but usually we are still running in a virtual machine that has access to a large panel of high-level utility libraries. This article actually demonstrates a broader, useful technique I call return-to-JVM that you can use for other purposes than simply PNG loading.

https://sites.google.com/view/infoappleguide

503. anonymous -- 2019-06-02 22:09

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, freight forwarding price https://nemzetkozi-szallitmanyozas-es-nemzetkozi-fuvarozas.blog.hu/2019/05/30/nemzetkozi_szallitmanyozas_verhetetlen_aron_es_ez_a_nemzetkozi_fuvarozasra_is_igaz

504. anonymous -- 2019-06-04 14:14

I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, i am always look for people to check out my web site. beard grooming Salt Lake City http://trolleysquarebarbers.com/beard-grooming-so-you-want-to-grow-a-beard/

505. anonymous -- 2019-06-05 14:54

I read a article under the same title some time ago, but this articles quality is much, much better. How you do this.. mobile car detail service Aurora CO http://denvermobilecarwash.com/service-areas-aurora/

506. anonymous -- 2019-06-08 17:58

I recently came across your blog and have been reading along. I thought I would leave my first comment. I don't know what to say except that I have enjoyed reading. Nice blog. I will keep visiting this blog very often. zhuilu old trail https://www.islandlifetaiwan.com/on-the-edge-of-insanity-taiwans-zhuilu-old-trail/

507. anonymous -- 2019-06-09 18:18

I'm glad I found this web site, I couldn't find any knowledge on this matter prior to.Also operate a site and if you are ever interested in doing some visitor writing for me if possible feel free to let me know, i am always look for people to check out my web site. mice control http://pestcontrolcentennial.com/

508. anonymous -- 2019-06-09 23:39

I can see that you are an expert at your field! I am launching a website soon, and your information will be very useful for me.. Thanks for all your help and wishing you all the success in your business. commercial concrete contractor Aurora http://concreteproservices.com/

509. anonymous -- 2019-06-10 12:24

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, San Diego Injury Lawyer https://www.sandiegoinjurylawyerblog.com

510. anonymous -- 2019-06-13 12:38

It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing. freight forwarding https://www.reuters.com/brandfeatures/venture-capital/article?id=71166

511. anonymous -- 2019-06-15 08:07

Thank You for Posting Article. You just want to let you know just before the check out your site and you find it very interesting and informative.

123 hp com envy5546

512. anonymous -- 2019-06-15 12:38

Thank you again for all the knowledge you distribute,Good post. I was very interested in the article, it's quite inspiring I should admit. I like visiting you site since I always come across interesting articles like this one.Great Job, I greatly appreciate that.Do Keep sharing! Regards, international freight forwarding http://gazdasagportal.hu/index.php/a-nemzetkozi-szallitmanyozasban-olcsobb-a-birsag-mint-a-jogi-vita-a-hatosagokkal/

513. anonymous -- 2019-06-15 21:22

I admit, I have not been on this web page in a long time... however it was another joy to see It is such an important topic and ignored by so many, even professionals. professionals. I thank you to help making people more aware of possible issues. Hyper Sonic https://home.hypersonicexchange.com/

514. JackRyan -- 2019-06-24 20:43
515. anonymous -- 2019-06-25 12:03

Thank you for making me realize this. It's great. https://www.gclub45.com/

516. anonymous -- 2019-06-25 12:04

This article is great. I like it very much. Thank you. https://www.gclub-royal1688.com/

517. names -- 2019-06-25 21:22

great article, thank you https://www.viiralfest.com/

518. anonymous -- 2019-06-28 10:07

Our Pay for <a href="https://researchpapers247.com/">custom written college papers</a> services makes your college life bearable and fulfilling by enabling you to pass your exams and also in other research and essay writing tasks.

519. anonymous -- 2019-06-28 13:46

I’m new on this blog. That’s means it’s my first-time visit. However, I have read your full blog post http://www.cross.tv/profile/730270?go=blogs&action=show&id=162168&backpage=1

520. anonymous -- 2019-06-30 09:38

this is very informative and intersting for those who are interested in blogging field. visit http://mathspirit.emyspot.com/pages/blog.html my article

523. anon o cara do TI -- 2019-07-02 14:38

Wonderful post, thank you so much!

https://www.seuencanto.com.br

525. anonymous -- 2019-07-03 17:17

njoyed reading the article above , really explains everything in detail,the article is very interesting and effective. Thank you and good luck for the upcoming articles, visit https://mathanxietysolution.home.blog/ my article on Mathematics anxiety solution

526. samikshagirdhar.azureink@gmail.com -- 2019-07-22 06:52

Wonderful blog! I found it while browsing on Yahoo News

http://www.avast-supoort.net

527. puremelda@gmail.com -- 2019-07-26 10:24

Look no more! With us, you are guaranteed of legitimate essay custom writing at the highest quality since we offer unmatched editing and fast essay writing services. https://researchpapers247.com/

529. ivymelda@gmail.com -- 2019-08-01 13:46

Best writing services

We understand that students in Australia encounter different challenges in completing their academic assignments. We offer best writing services to students regardless of their specialty, discipline or educational level. https://au.247customwriting.com/best-writing-services/

530. ivymelda@gmail.com -- 2019-08-01 13:46

Best writing services

We understand that students in Australia encounter different challenges in completing their academic assignments. We offer best writing services to students regardless of their specialty, discipline or educational level. https://au.247customwriting.com/best-writing-services/

531. ivymelda@gmail.com -- 2019-08-01 13:46

Best writing services

We understand that students in Australia encounter different challenges in completing their academic assignments. We offer best writing services to students regardless of their specialty, discipline or educational level. https://au.247customwriting.com/best-writing-services/

532. anonymous -- 2019-08-03 11:42

Thank you for the good information, quality, so we have received a lot of knowledge and are very useful to us.

https://www.goldenslot45.com/

533. anonymous -- 2019-08-03 11:43

Good quality websites allow us to gain more knowledge with good quality websites. https://slot168.io/

534. case study help -- 2019-08-06 14:55

Need Case Study Help? Get Assignment Help from Australia's No.1 Assignment Help Service. For further information queries visit our website <a href = http://assignmentstudio.net/case-study-help/>case study help</a>

535. Assignment Help -- 2019-08-07 13:59

All the student needs to do is to contact us, feed us the requirements of the assignment related to any academic field and we will ensure that the assignment work is up to the mark. Customer satisfaction is our number one priority and there is 100% guarantee that our students will score best grades in the assignments provided by Assignment studio. For further information queries visit our website <a href = http://assignmentstudio.net/assignment-help/>Assignment Help</a>

536. anonymous -- 2019-08-07 14:58

Custom Research Paper Service Any student is free to request for our Buy Custom Papers Online services as we have the most affordable pricing in the market. We always keep our promise and will deliver the paper within the agreed time and ensure that it is written to meet all the Best Custom Paper standards. https://researchpapers247.com/

537. Henry E Howe -- 2019-08-10 18:52

Your content helped me a lot to take my doubts, amazing content, thank you very much for sharing. visit https://amazononlineguide.blogspot.com/2019/08/how-to-get-free-amazon-music-on-your.html for free Amazon gift card codes

Add New Comment