Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by dansav · Mar 19, 2012 at 05:25 PM · iphonescreenshotreadpixels

What is the bottleneck in this iphone code?

I'm trying to grab screenshots using the script below on the iphone. Application.captureScreenshot works faster than this code on the iphone but then I can't control the capture area. Both are really slow on the iphone 4s like 1.5 frames per second. I'm wondering if there is any way to speed this up using any new features in the pro version?

 import System;
 import System.IO;

 function UploadPNG () {
         // Create a texture the size of the screen, RGB24 format
         var width = Screen.width;
         var height = Screen.height;
         var tex = new Texture2D (width, height, TextureFormat.RGB24, false);
         // Read screen contents into the texture
         tex.ReadPixels (Rect(0, 0, width, height), 0, 0);
     
         // Encode texture into PNG
         var bytes = tex.EncodeToPNG();
         Destroy (tex);
     
        File.WriteAllBytes(Application.dataPath+"Documents/screenpng"+screencounter+".png", bytes);
         }
     }
Comment
Add comment · Show 1
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image dansav · Mar 22, 2012 at 05:58 PM 0
Share

Well by profiling do you mean commenting out everything one at a time to see how much the speed changes? Or is there a more scientific way? In my tests so far ReadPixels is the slowest operation. Is it possible to find a faster operation?

3 Replies

· Add your reply
  • Sort: 
avatar image
1

Answer by Statement · Mar 22, 2012 at 05:32 PM

What is the bottleneck in this iphone code?

Profile the code. It's good exercise and will answer your question.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

Answer by tomka · May 23, 2012 at 04:33 AM

Split the file saving out into a thread. This code will still be slow, but at least you won't be stalling the update loop while writing to disk.

Comment
Add comment · Show 2 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image dansav · May 23, 2012 at 04:51 AM 0
Share

Does the iphone do threads? If so can you point me to an example. I've never looked into that technique in unity. Thanks for the idea.

avatar image tomka · May 23, 2012 at 05:22 AM 0
Share

Yeah the iPhone can do threads.

Something like...

using System.Threading; at the top

and

class FileWriter { public FileWriter(byte[] bytes, string filename) { this.filename = new string(filename); //clone for thread safety this.bytes = new byte[bytes.Length]; //clone for thread safety bytes.CopyTo(this.bytes, 0) ; }

public void WriteToDisk() { System.IO.File.WriteAllBytes(filename, bytes); } }

FileWriter writer = new FileWriter(); Thread myFileWriterThread = new Thread(writer.WriteToDisk); myFileWriterThread.Start();

That's more or less it. $$anonymous$$SDN's C# reference has some better examples but their API docs suck.

...apologies for the formatting. Apparently writing this as a comment ruins it.

avatar image
0

Answer by kirpigiller · May 23, 2012 at 05:17 AM

tex.ReadPixels and File.WriteAllBytes unfortunately there is no way to really speed up capturing. Especially on iPhone.

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

6 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How to make screenshot on iPhone? 1 Answer

Texture2D.EncodeToPNG not working on iOs on Unity 3.5.5f3 1 Answer

Using Screenshot as Texture 4 Answers

Accessing the iPhone or Android camera for screenshot with overlay 3 Answers

Texture2D.ReadPixels and not lose image quality 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges