FloatPixMapRef FPMCopy(FloatPixMapRef pm) { if (pm != NULL) { size_t byteCount = GetPixelCount(pm) * sizeof (FPMColor); if (byteCount == 0) { // One empty pixmap of a given size is the same as another, so we'll stick with the one instead of making another. assert(pm->pixels == NULL); return FPMRetain(pm); } assert(pm->pixels != NULL); void *pixels = malloc(byteCount); if (pixels == NULL) return NULL; if (pm->rowCount == pm->width) { // No padding to skip. memcpy(pixels, pm->pixels, byteCount); } else { // Original is padded, copy row by row. FPMColor *srcPx = pm->pixels; FPMColor *dstPx = pixels; size_t count = pm->height; do { memcpy(dstPx, srcPx, sizeof (FPMColor) * pm->width); srcPx += pm->rowCount; dstPx += pm->width; } while (--count); } return MakeFPM(FPMMakeSize(pm->width, pm->height), pm->width, pixels, NULL); } else { return NULL; } }
void ModelCreator::Create3DModel() { GetPixelCount(); CreatePixelData(); CreateBinaryData(); }