void run() { ofPixels pixels; const int w = 320; const int h = 240; for(ofPixelFormat pixelFormat=OF_PIXELS_GRAY; pixelFormat<OF_PIXELS_NUM_FORMATS; pixelFormat = (ofPixelFormat)(pixelFormat+1)) { pixels.allocate(w,h,pixelFormat); int bpp = bitsPerPixel(pixelFormat); string format = formatName(pixelFormat); test_eq(pixels.getBitsPerChannel(),8,"getBitsPerChannel() " + format); test_eq(pixels.getBitsPerPixel(),bpp,"getBitsPerPixel() " + format); test_eq(pixels.getBytesPerChannel(),1,"getBytesPerChannel() " + format); test_eq(pixels.getBytesPerPixel(),bpp/8,"getBytesPerPixel() " + format); test_eq(pixels.getBytesStride(),w*bpp/8,"getBytesStride() " + format); test_eq(pixels.getWidth(),w,"getWidth() " + format); test_eq(pixels.getHeight(),h,"getHeight() " + format); if(hasImageFormat(pixelFormat)) { test_eq(pixels.getImageType(),imageType(pixelFormat),"getImageType() " + format); } if(hasChannels(pixelFormat)) { test_eq(pixels.getNumChannels(),numChannels(pixelFormat),"getNumChannels() " + format); } test_eq(pixels.getNumPlanes(),getNumPlanes(pixelFormat),"getNumPlanes() " + format); test_eq(pixels.getPixelFormat(),pixelFormat,"getPixelFormat() " + format); test_eq((uint64_t)pixels.getPlane(0).getData(), (uint64_t)pixels.getData(),"getPlane(0)==getData() " + format); test_eq(pixels.getTotalBytes(),w*h*bpp/8,"getTotalBytes() " + format); if(hasWorkingIterators(pixelFormat)) { test_eq((uint64_t)pixels.getLine(0).begin(), (uint64_t)pixels.getData(),"getLine(0).begin()==getData() " + format); test_eq((uint64_t)pixels.getLine(0).end(), (uint64_t)pixels.getData()+(w*bpp/8),"getLine(0).end()==getData()+(w*3) " + format); test_eq((uint64_t)pixels.getLine(h-1).begin(), (uint64_t)pixels.getData()+(w*bpp/8*(h-1)),"getLine(h-1).begin()==getData()+(w*bpp/8*(h-1)) " + format); test_eq((uint64_t)pixels.getLine(h-1).end(), (uint64_t)pixels.end(),"getLine(h-1).end()==end() " + format); test_eq((uint64_t)&pixels.getLine(0).getPixel(10)[0], (uint64_t)pixels.getData()+(10*bpp/8),"getLine(0).getPixel(10)[0]==pixels.getData()+(10*bpp/8)"); } } }
ofPixels_<PixelType> ofPixels_<PixelType>::getPlane(int planeIdx){ planeIdx = ofClamp(planeIdx,0,getNumPlanes()); ofPixels_<PixelType> plane; switch(pixelFormat){ case OF_PIXELS_RGB: case OF_PIXELS_BGR: case OF_PIXELS_RGB565: case OF_PIXELS_RGBA: case OF_PIXELS_BGRA: case OF_PIXELS_GRAY: case OF_PIXELS_YUY2: case OF_PIXELS_UYVY: plane.setFromExternalPixels(pixels,width,height,pixelFormat); break; case OF_PIXELS_NV12: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_UV); break; } break; case OF_PIXELS_NV21: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_VU); break; } break; case OF_PIXELS_YV12: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_V); break; case 2: plane.setFromExternalPixels(pixels+int(width*height+width/2*height/2),width/2,height/2,OF_PIXELS_U); break; } break; case OF_PIXELS_I420: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_U); break; case 2: plane.setFromExternalPixels(pixels+int(width*height+width/2*height/2),width/2,height/2,OF_PIXELS_V); break; } break; default: break; } return plane; }
ofPixels_<PixelType> ofPixels_<PixelType>::getPlane(int planeIdx){ planeIdx = ofClamp(planeIdx,0,getNumPlanes()); ofPixels_<PixelType> plane; switch(pixelFormat){ case OF_PIXELS_RGB: case OF_PIXELS_BGR: case OF_PIXELS_RGB565: case OF_PIXELS_RGBA: case OF_PIXELS_BGRA: case OF_PIXELS_GRAY: case OF_PIXELS_GRAY_ALPHA: case OF_PIXELS_YUY2: case OF_PIXELS_UYVY: case OF_PIXELS_Y: case OF_PIXELS_U: case OF_PIXELS_V: case OF_PIXELS_UV: case OF_PIXELS_VU: plane.setFromExternalPixels(pixels,width,height,pixelFormat); break; case OF_PIXELS_NV12: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_UV); break; } break; case OF_PIXELS_NV21: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_VU); break; } break; case OF_PIXELS_YV12: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_V); break; case 2: plane.setFromExternalPixels(pixels+int(width*height+width/2*height/2),width/2,height/2,OF_PIXELS_U); break; } break; case OF_PIXELS_I420: switch(planeIdx){ case 0: plane.setFromExternalPixels(pixels,width,height,OF_PIXELS_Y); break; case 1: plane.setFromExternalPixels(pixels+width*height,width/2,height/2,OF_PIXELS_U); break; case 2: plane.setFromExternalPixels(pixels+int(width*height+width/2*height/2),width/2,height/2,OF_PIXELS_V); break; } break; case OF_PIXELS_NUM_FORMATS: case OF_PIXELS_NATIVE: case OF_PIXELS_UNKNOWN: break; } return std::move(plane); }