It&#x27;s OK, but I wouldn&#x27;t call it great. It&#x27;s readable, but sort of hard to use. The trouble is that the interface is too flexible, more so than the underlying code, and so it&#x27;s hard to know which combinations of parameters are legal. If you ask for a disallowed combination, you just get nil back and no explanation.<p>Edit: wrong API! This one does have a pixel format object.<p>It also tries to be helpful and so doesn&#x27;t require all parameters. If you don&#x27;t give it a data pointer, it will allocate memory for you. If you don&#x27;t give it bytesPerRow, it will calculate it for you. These ought to be separate calls, not all glued together into one gigantic do-everything call.<p>The verbosity itself is fine, but it&#x27;s symptomatic of some suboptimal API design behind it.