On Dec 3, 2013, at 10:10 AM, Jim Graham <james.gra...@oracle.com> wrote:
> Hi Mike, > > One more question about @2x handling on MacOS. > > Clearly, in the simple case of someone loading an ordinary "foo.png" and > painting it on a retina display without doing anything special with the > transform, it will be scaled up by 2x to retain proper size. > > Also, clearly, if a "f...@2x.png" file exists, it will be loaded > automatically and found to be twice as large and displayed with no scaling so > that it is the same "size". > > But, what if in the first step they manually specified the image file name as > "f...@2x.png" (and assuming there is no "foo@2...@2x.png")? Will it display > with its pixels scaled up to double sized because it was the direct image > that they specified? Yes, explicitly asking for "foo@2x" cause the search machinery to look for "f...@2x.png" and "foo@2...@2x.png". > Or, does the system recognize that it came from a file named @2x and assume > that it is a double-screen-resolution image and paint it the same way it > would have done if it was implicitly loaded as the higher resolution variant > of "foo.png"? No. Images reps loaded with the @2x suffix are not special — they are just an additional representation of the same named image, and could vary unpredictable in dimensions, bit depth, and color space. We simply prefer that they not. :-) > Let me spell out the scenarios: > > Scenario 1: > - app is retina-enabled > - app has WxH foo.png media (and no @2x versions) > - app loads image from "foo.png" > - app displays image with standard default scaling on a retina screen > => result is image takes up 2W x 2H pixels on the retina screen > > Scenario 2: > - app is retina-enabled > - app has WxH foo.png media > - app also has 2W x 2H f...@2x.png media > - app loads image from "foo.png" > - app displays image with standard default scaling on a retina screen > => result is system also loads f...@2x.png and displays it with 2W x 2H > retina pixels on the retina screen - the same physical size as in the > previous example > > Scenario 3: > - app is retina-enabled > - app has WxH foo.png media > - app also has 2W x 2H f...@2x.png media > - app loads image from "f...@2x.png" rather than "foo.png" > - app displays image with standard default scaling on a retina screen > => result is ??? > => I'm guessing that it gets drawn twice the size as Scenario's 1 and 2 > because it is no longer relative to the WxH base image? > > Scenario 4: > same as Scenario 3, but foo.png doesn't exist, f...@2x.png is the only > version found in the media for the app > => result is ??? > => I'm guessing the result is the same as Scenario 3 > > Also, the convention is for the @2x image to be twice the pixel size of the > regular image, but what if it isn't? Is it always drawn at a 0.5x relative > scale because of the implication of the @2x file name, or will it be > dynamically sized for "basew/@2xw, baseh/@2xh" which just usually works out > to 0.5x if the author followed conventions? > > ...jim @2x in the file name is just a hack to add more representations to images that are not already multi-rep (.png vs. .tiff and .icns). The actual dimensions of the image dictate when/how it gets used at runtime. I believe the search for @2x variants is only performed if the original image rep is not sufficient to fully fill the rect of pixels in the destination. Regards, Mike Swingler Apple Inc.