本文整理汇总了C++中ofPixels_类的典型用法代码示例。如果您正苦于以下问题:C++ ofPixels_类的具体用法?C++ ofPixels_怎么用?C++ ofPixels_使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ofPixels_类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ofClamp
void ofPixels_<PixelType>::cropTo(ofPixels_<PixelType> &toPix, int x, int y, int _width, int _height) const{
if (bAllocated){
if(&toPix == this){
toPix.crop(x,y,_width,_height);
return;
}
_width = ofClamp(_width,1,getWidth());
_height = ofClamp(_height,1,getHeight());
if ((toPix.width != _width) || (toPix.height != _height) || (toPix.pixelFormat != pixelFormat)){
toPix.allocate(_width, _height, pixelFormat);
}
// this prevents having to do a check for bounds in the for loop;
int minX = MAX(x, 0) * getNumChannels();
int maxX = MIN(x+_width, width) * getNumChannels();
int minY = MAX(y, 0);
int maxY = MIN(y+_height, height);
iterator newPixel = toPix.begin();
for(ConstLine line = getConstLines().begin()+minY; line!=getConstLines().begin()+maxY; ++line ){
for(const_iterator pixel = line.begin()+minX; pixel<line.begin()+maxX; ++pixel){
*newPixel++ = *pixel;
}
}
}
}
示例2: ofClamp
void ofPixels_<PixelType>::cropTo(ofPixels_<PixelType> &toPix, int x, int y, int _width, int _height) const{
if (bAllocated){
if(&toPix == this){
toPix.crop(x,y,_width,_height);
return;
}
_width = ofClamp(_width,1,getWidth());
_height = ofClamp(_height,1,getHeight());
if ((toPix.width != _width) || (toPix.height != _height) || (toPix.pixelFormat != pixelFormat)){
toPix.allocate(_width, _height, pixelFormat);
}
// this prevents having to do a check for bounds in the for loop;
int minX = MAX(x, 0);
int maxX = MIN(x+_width, width);
int minY = MAX(y, 0);
int maxY = MIN(y+_height, height);
auto newPixel = toPix.getPixelsIter().begin();
for(auto line: getConstLines(minY, maxY - minY)){
for(auto pixel: line.getPixels(minX, maxX - minX)){
newPixel++ = pixel;
}
}
}
}
示例3: putBmpIntoPixels
void putBmpIntoPixels(FIBITMAP * bmp, ofPixels_<PixelType> &pix, bool swapForLittleEndian = true) {
// convert to correct type depending on type of input bmp and PixelType
FIBITMAP* bmpConverted = NULL;
FREE_IMAGE_TYPE imgType = FreeImage_GetImageType(bmp);
if(sizeof(PixelType)==1 &&
(FreeImage_GetColorType(bmp) == FIC_PALETTE || FreeImage_GetBPP(bmp) < 8
|| imgType!=FIT_BITMAP)) {
if(FreeImage_IsTransparent(bmp)) {
bmpConverted = FreeImage_ConvertTo32Bits(bmp);
} else {
bmpConverted = FreeImage_ConvertTo24Bits(bmp);
}
bmp = bmpConverted;
}else if(sizeof(PixelType)==2 && imgType!=FIT_UINT16 && imgType!=FIT_RGB16 && imgType!=FIT_RGBA16){
if(FreeImage_IsTransparent(bmp)) {
bmpConverted = FreeImage_ConvertToType(bmp,FIT_RGBA16);
} else {
bmpConverted = FreeImage_ConvertToType(bmp,FIT_RGB16);
}
bmp = bmpConverted;
}else if(sizeof(PixelType)==4 && imgType!=FIT_FLOAT && imgType!=FIT_RGBF && imgType!=FIT_RGBAF){
if(FreeImage_IsTransparent(bmp)) {
bmpConverted = FreeImage_ConvertToType(bmp,FIT_RGBAF);
} else {
bmpConverted = FreeImage_ConvertToType(bmp,FIT_RGBF);
}
bmp = bmpConverted;
}
unsigned int width = FreeImage_GetWidth(bmp);
unsigned int height = FreeImage_GetHeight(bmp);
unsigned int bpp = FreeImage_GetBPP(bmp);
unsigned int channels = (bpp / sizeof(PixelType)) / 8;
unsigned int pitch = FreeImage_GetPitch(bmp);
// ofPixels are top left, FIBITMAP is bottom left
FreeImage_FlipVertical(bmp);
unsigned char* bmpBits = FreeImage_GetBits(bmp);
if(bmpBits != NULL) {
pix.setFromAlignedPixels((PixelType*) bmpBits, width, height, channels, pitch);
} else {
ofLogError("ofImage") << "putBmpIntoPixels(): unable to set ofPixels from FIBITMAP";
}
if(bmpConverted != NULL) {
FreeImage_Unload(bmpConverted);
}
#ifdef TARGET_LITTLE_ENDIAN
if(swapForLittleEndian && sizeof(PixelType) == 1) {
pix.swapRgb();
}
#endif
}
示例4: removeIslands
void removeIslands(ofPixels_<T>& img) {
int w = img.getWidth(), h = img.getHeight();
int ia1=-w-1,ia2=-w-0,ia3=-w+1,ib1=-0-1,ib3=-0+1,ic1=+w-1,ic2=+w-0,ic3=+w+1;
T* p = img.getPixels();
for(int y = 1; y + 1 < h; y++) {
for(int x = 1; x + 1 < w; x++) {
int i = y * w + x;
if(p[i]) {
if(!p[i+ia1]&&!p[i+ia2]&&!p[i+ia3]&&!p[i+ib1]&&!p[i+ib3]&&!p[i+ic1]&&!p[i+ic2]&&!p[i+ic3]) {
p[i] = 0;
}
}
}
}
}
示例5: getBmpFromPixels
void ofImage_<PixelType>::changeTypeOfPixels(ofPixels_<PixelType> &pix, ofImageType newType){
int oldType = pix.getImageType();
if (oldType == newType) {
return; // no need to reallocate
}
FIBITMAP * bmp = getBmpFromPixels(pix);
FIBITMAP * convertedBmp = nullptr;
switch (newType){
case OF_IMAGE_GRAYSCALE:
convertedBmp = FreeImage_ConvertToGreyscale(bmp);
break;
case OF_IMAGE_COLOR:
convertedBmp = FreeImage_ConvertTo24Bits(bmp);
break;
case OF_IMAGE_COLOR_ALPHA:
convertedBmp = FreeImage_ConvertTo32Bits(bmp);
break;
default:
ofLogError("ofImage") << "changeTypeOfPixels(): unknown image type: " << newType;
break;
}
putBmpIntoPixels(convertedBmp, pix, false);
if (bmp != nullptr) {
FreeImage_Unload(bmp);
}
if (convertedBmp != nullptr) {
FreeImage_Unload(convertedBmp);
}
}
示例6: selectBitImageMode
std::size_t DefaultBitImageCommands::selectBitImageMode(const ofPixels_<unsigned char>& binaryPixels,
BaseCodes::PrintResolution printResolution)
{
// width = nL + (nH * 256)
// nH is the HIGH part of the WIDTH VALUE.
// nL is the LOW part of the WIDTH VALUE.
// nH will always be 0 for values less that 256 (1 byte)
uint8_t nH = getHighByte(binaryPixels.getWidth());
uint8_t nL = getLowByte(binaryPixels.getWidth());
std::vector<uint8_t> buffer;
buffer.push_back(BaseCodes::ESC);
buffer.push_back('*');
buffer.push_back(printResolution);
buffer.push_back(nL);
buffer.push_back(nH);
uint8_t currentByte = 0;
int bitIndex = 0;
for(int x = 0; x < binaryPixels.getWidth(); ++x)
{
currentByte = 0;
bitIndex = 0;
for(int y = 0; y < binaryPixels.getHeight(); ++y)
{
bool binaryValue = binaryPixels[binaryPixels.getPixelIndex(x,y)] < ofColor_<unsigned char>::limit() / 2;
currentByte |= binaryValue << (7 - bitIndex);
bitIndex++;
if(8 == bitIndex)
{
buffer.push_back(currentByte);
currentByte = 0;
bitIndex = 0;
}
}
}
return writeBytes(buffer);
}
示例7: getNumChannels
void ofPixels_<PixelType>::mirrorTo(ofPixels_<PixelType> & dst, bool vertically, bool horizontal) const{
if(&dst == this){
dst.mirror(vertically,horizontal);
return;
}
if (!vertically && !horizontal){
dst = *this;
return;
}
int bytesPerPixel = getNumChannels();
dst.allocate(width, height, getPixelFormat());
if(vertically && !horizontal){
auto dstLines = dst.getLines();
auto lineSrc = getConstLines().begin();
auto line = --dstLines.end();
auto stride = line.getStride();
for(; line>=dstLines.begin(); --line, ++lineSrc){
memcpy(line.begin(), lineSrc.begin(), stride);
}
}else if (!vertically && horizontal){
int wToDo = width/2;
int hToDo = height;
for (int i = 0; i < wToDo; i++){
for (int j = 0; j < hToDo; j++){
int pixelb = i;
int pixela = j*width + i;
for (int k = 0; k < bytesPerPixel; k++){
dst[pixela*bytesPerPixel + k] = pixels[pixelb*bytesPerPixel + k];
dst[pixelb*bytesPerPixel + k] = pixels[pixela*bytesPerPixel + k];
}
}
}
} else {
// I couldn't think of a good way to do this in place. I'm sure there is.
mirrorTo(dst,true, false);
dst.mirror(false, true);
}
}
示例8: clampedAdd
bool ofPixels_<PixelType>::blendInto(ofPixels_<PixelType> &dst, int xTo, int yTo) const{
if (!(isAllocated()) || !(dst.isAllocated()) || getBytesPerPixel() != dst.getBytesPerPixel() || xTo + getWidth()>dst.getWidth() || yTo + getHeight()>dst.getHeight() || getNumChannels()==0) return false;
std::function<void(const ConstPixel&,Pixel&)> blendFunc;
switch(getNumChannels()){
case 1:
blendFunc = [](const ConstPixel&src, Pixel&dst){
dst[0] = clampedAdd(src[0], dst[0]);
};
break;
case 2:
blendFunc = [](const ConstPixel&src, Pixel&dst){
dst[0] = clampedAdd(src[0], dst[0] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[1]));
dst[1] = clampedAdd(src[1], dst[1] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[1]));
};
break;
case 3:
blendFunc = [](const ConstPixel&src, Pixel&dst){
dst[0] = clampedAdd(src[0], dst[0]);
dst[1] = clampedAdd(src[1], dst[1]);
dst[2] = clampedAdd(src[2], dst[2]);
};
break;
case 4:
blendFunc = [](const ConstPixel&src, Pixel&dst){
dst[0] = clampedAdd(src[0], dst[0] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[3]));
dst[1] = clampedAdd(src[1], dst[1] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[3]));
dst[2] = clampedAdd(src[2], dst[2] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[3]));
dst[3] = clampedAdd(src[3], dst[3] / ofColor_<PixelType>::limit() * (ofColor_<PixelType>::limit() - src[3]));
};
break;
}
auto dstLine = dst.getLine(yTo);
for(auto line: getConstLines()){
auto dstPixel = dstLine.getPixels().begin() + xTo;
for(auto p: line.getPixels()){
blendFunc(p,dstPixel);
dstPixel++;
}
dstLine++;
}
return true;
}
示例9: channelsFromPixelFormat
void ofPixels_<PixelType>::setChannel(int channel, const ofPixels_<PixelType> channelPixels){
int channels = channelsFromPixelFormat(pixelFormat);
if(channels==0) return;
channel = ofClamp(channel,0,channels-1);
const_iterator channelPixel = channelPixels.begin();
for(auto p: getPixelsIter()){
p[channel] = *channelPixel++;
}
}
示例10: channelsFromPixelFormat
void ofPixels_<PixelType>::setChannel(int channel, const ofPixels_<PixelType> channelPixels){
int channels = channelsFromPixelFormat(pixelFormat);
if(channels==0) return;
channel = ofClamp(channel,0,channels-1);
const_iterator channelPixel = channelPixels.begin();
iterator _end = end();
for(iterator i=begin()+channel;i<_end;i+=channels,++channelPixel){
*i = *channelPixel;
}
}
示例11: putBmpIntoPixels
void putBmpIntoPixels(FIBITMAP * bmp, ofPixels_<PixelType> &pix, bool swapForLittleEndian = true) {
// some images use a palette, or <8 bpp, so convert them to raster 8-bit channels
FIBITMAP* bmpConverted = NULL;
if(FreeImage_GetColorType(bmp) == FIC_PALETTE || FreeImage_GetBPP(bmp) < 8) {
if(FreeImage_IsTransparent(bmp)) {
bmpConverted = FreeImage_ConvertTo32Bits(bmp);
} else {
bmpConverted = FreeImage_ConvertTo24Bits(bmp);
}
bmp = bmpConverted;
}
unsigned int width = FreeImage_GetWidth(bmp);
unsigned int height = FreeImage_GetHeight(bmp);
unsigned int bpp = FreeImage_GetBPP(bmp);
unsigned int channels = (bpp / sizeof(PixelType)) / 8;
unsigned int pitch = FreeImage_GetPitch(bmp);
// ofPixels are top left, FIBITMAP is bottom left
FreeImage_FlipVertical(bmp);
unsigned char* bmpBits = FreeImage_GetBits(bmp);
if(bmpBits != NULL) {
pix.setFromAlignedPixels((PixelType*) bmpBits, width, height, channels, pitch);
} else {
ofLogError() << "ofImage::putBmpIntoPixels() unable to set ofPixels from FIBITMAP";
}
if(bmpConverted != NULL) {
FreeImage_Unload(bmpConverted);
}
#ifdef TARGET_LITTLE_ENDIAN
if(swapForLittleEndian && sizeof(PixelType) == 1) {
pix.swapRgb();
}
#endif
}
示例12: getNumChannels
void ofPixels_<PixelType>::mirrorTo(ofPixels_<PixelType> & dst, bool vertically, bool horizontal) const{
if(&dst == this){
dst.mirror(vertically,horizontal);
return;
}
if (!vertically && !horizontal){
dst = *this;
return;
}
int bytesPerPixel = getNumChannels();
if (! (vertically && horizontal)){
int wToDo = horizontal ? width/2 : width;
int hToDo = vertically ? height/2 : height;
for (int i = 0; i < wToDo; i++){
for (int j = 0; j < hToDo; j++){
int pixelb = (vertically ? (height - j - 1) : j) * width + (horizontal ? (width - i - 1) : i);
int pixela = j*width + i;
for (int k = 0; k < bytesPerPixel; k++){
dst[pixela*bytesPerPixel + k] = pixels[pixelb*bytesPerPixel + k];
dst[pixelb*bytesPerPixel + k] = pixels[pixela*bytesPerPixel + k];
}
}
}
} else {
// I couldn't think of a good way to do this in place. I'm sure there is.
mirrorTo(dst,true, false);
dst.mirror(false, true);
}
}
示例13: inRect
ofPixels_<unsigned char> ImageUtils::scaleAndCropTo(const ofPixels_<unsigned char>& pixels,
int width,
int height,
ofScaleMode scaleMode)
{
ofRectangle inRect(0,0,pixels.getWidth(),pixels.getHeight());
ofRectangle outRect(0,0,width,height);
inRect.scaleTo(outRect,scaleMode);
ofPixels_<unsigned char> inPixels = pixels;
inPixels.resize(inRect.getWidth(),inRect.getHeight());
ofPixels_<unsigned char> outPixels;
inPixels.cropTo(outPixels,
outRect.x - inRect.x,
0,
outRect.width,
outRect.height);
return outPixels;
}
示例14: getBmpFromPixels
void ofImage_<PixelType>::changeTypeOfPixels(ofPixels_<PixelType> &pix, ofImageType newType){
int oldType = pix.getImageType();
if (oldType == newType) {
return; // no need to reallocate
}
FIBITMAP * bmp = getBmpFromPixels(pix);
FIBITMAP * convertedBmp = NULL;
switch (newType){
case OF_IMAGE_GRAYSCALE:
convertedBmp = FreeImage_ConvertToGreyscale(bmp);
break;
case OF_IMAGE_COLOR:
convertedBmp = FreeImage_ConvertTo24Bits(bmp);
break;
case OF_IMAGE_COLOR_ALPHA:
convertedBmp = FreeImage_ConvertTo32Bits(bmp);
break;
default:
ofLogError("ofImage") << "changeTypeOfPixels(): unknown image type: " << newType;
break;
}
putBmpIntoPixels(convertedBmp, pix, false);
if (bmp != NULL) {
FreeImage_Unload(bmp);
}
if (convertedBmp != NULL) {
FreeImage_Unload(convertedBmp);
}
if(bUseTexture){
// always reallocate the texture. if ofTexture doesn't need reallocation,
// it doesn't have to. but it needs to change the internal format.
tex.allocate(pixels.getWidth(), pixels.getHeight(), ofGetGlInternalFormat(pixels));
if(ofGetGLProgrammableRenderer() && (pixels.getNumChannels()==1 || pixels.getNumChannels()==2)){
tex.setRGToRGBASwizzles(true);
}
}
}
示例15: getBmpFromPixels
void ofImage_<PixelType>::changeTypeOfPixels(ofPixels_<PixelType> &pix, ofImageType newType){
int oldType = pix.getImageType();
if (oldType == newType) {
return; // no need to reallocate
}
FIBITMAP * bmp = getBmpFromPixels(pix);
FIBITMAP * convertedBmp = NULL;
switch (newType){
case OF_IMAGE_GRAYSCALE:
convertedBmp = FreeImage_ConvertToGreyscale(bmp);
break;
case OF_IMAGE_COLOR:
convertedBmp = FreeImage_ConvertTo24Bits(bmp);
break;
case OF_IMAGE_COLOR_ALPHA:
convertedBmp = FreeImage_ConvertTo32Bits(bmp);
break;
default:
ofLog(OF_LOG_ERROR, "changeTypeOfPixels: format not supported");
break;
}
putBmpIntoPixels(convertedBmp, pix, false);
if (bmp != NULL) {
FreeImage_Unload(bmp);
}
if (convertedBmp != NULL) {
FreeImage_Unload(convertedBmp);
}
if(bUseTexture){
// always reallocate the texture. if ofTexture doesn't need reallocation,
// it doesn't have to. but it needs to change the internal format.
tex.allocate(pixels.getWidth(), pixels.getHeight(), ofGetGlInternalFormat(pixels));
}
}