Hey, you're almost right. Let me clarify a bit.
So if we want to use RGB-4444, we really should be saving our images in that format
Yes, this part is right.
because whatever tool we use to save them will/should place the used bits 'first' (maybe it will look like the first 4 bits are used, the last 4 are all zeros for example). The file size (might) stay the same as an RGB-8888 since it's still treating it as 8 bits per pixel when writing to disk.
This part is wrong. When you save your file as RGBA-4444, it's really "RGBA-4444" and not "RGBA-8888 with half of the bits being zeros". So the file should be about half the size as the RGBA-8888 image. In fact, when cocos loads an image file for the first time, it is loaded in an RGBA-8888 "container", so this is when you get 4 bits with useful values followed (or preceded, whatever) by 4 bits which are all zeros (or other random values). But right after that, the repacking happens and the image takes the amount of memory it should.
If I were to give Texture2D a true RGB-8888 image, and use the RGB-4444 flag on it, the operation will still 'work', but the colors will basically come out differently since the last 4 bits of each pixel are discarded during repacking.
Exactly. I've never tried it but yes, you should expect a completely different image.
Hope it's all clear now.