这篇教程C++ FreeImage_GetColorType函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中FreeImage_GetColorType函数的典型用法代码示例。如果您正苦于以下问题:C++ FreeImage_GetColorType函数的具体用法?C++ FreeImage_GetColorType怎么用?C++ FreeImage_GetColorType使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了FreeImage_GetColorType函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: FreeImage_GetImageType/** * Freeimage format to Indielib format. * @param pHandle the FIBITMAP that is used for calculation */int FreeImageHelper::calculateINDFormat(FIBITMAP* pHandle) { FREE_IMAGE_TYPE imgType = FreeImage_GetImageType(pHandle); //Bitmap type (most common) if (FIT_BITMAP == imgType) { //Depending on the freeimage color type analysis, we determine our IND_ColorFormat FREE_IMAGE_COLOR_TYPE colorType = FreeImage_GetColorType(pHandle); if (FIC_MINISBLACK == colorType || FIC_MINISWHITE == colorType) { return IND_LUMINANCE; } else if (FIC_PALETTE == colorType) { return IND_COLOUR_INDEX; } else if (FIC_RGB == colorType) { //HACK: This is because when converting to 32 bits, even though there is alpha channel, //the color analysis function returns FIC_RGB, as alpha is opaque. We rely on that to know //if we have alpha channel so it's not good. if (FreeImage_GetBPP(pHandle) == 32) { return IND_RGBA; } else { return IND_RGB; } } else if (FIC_RGBALPHA == colorType) { return IND_RGBA; } } //TODO: OTHER IMAGE TYPES //Failure return IND_UNKNOWN;}
开发者ID:Javilop,项目名称:indielib-crossplatform,代码行数:38,
示例2: NPP_ASSERT_MSGvoidFreeImageStack::loadImage(unsigned int iSlice, npp::ImageNPP_8u_C1 & rImage)const{ NPP_ASSERT_MSG(iSlice < slices(), "Slice index exceeded number of slices in stack."); FIBITMAP * pBitmap = FreeImage_LockPage(pImageStack_, iSlice); NPP_ASSERT_NOT_NULL(pBitmap); // make sure this is an 8-bit single channel image NPP_DEBUG_ASSERT(FreeImage_GetColorType(pBitmap) == FIC_MINISBLACK); NPP_DEBUG_ASSERT(FreeImage_GetBPP(pBitmap) == 8); NPP_DEBUG_ASSERT(FreeImage_GetWidth(pBitmap) == nWidth_); NPP_DEBUG_ASSERT(FreeImage_GetHeight(pBitmap) == nHeight_); unsigned int nSrcPitch = FreeImage_GetPitch(pBitmap); unsigned char * pSrcData = FreeImage_GetBits(pBitmap); if (rImage.width() == nWidth_ && rImage.height() == nHeight_) { NPP_CHECK_CUDA(cudaMemcpy2D(rImage.data(), rImage.pitch(), pSrcData, nSrcPitch, nWidth_, nHeight_, cudaMemcpyHostToDevice)); } else { // create new NPP image npp::ImageNPP_8u_C1 oImage(nWidth_, nHeight_); // transfer slice data into new device image NPP_CHECK_CUDA(cudaMemcpy2D(oImage.data(), oImage.pitch(), pSrcData, nSrcPitch, nWidth_, nHeight_, cudaMemcpyHostToDevice)); // swap the result image with the reference passed into this method rImage.swap(oImage); } // release locked slice FreeImage_UnlockPage(pImageStack_, pBitmap, FALSE);}
开发者ID:peterlu,项目名称:ConDDM,代码行数:34,
示例3: sFileName_FreeImageStack::FreeImageStack(const std::string & rFileName): sFileName_(rFileName) , pImageStack_(0) , nWidth_(0) , nHeight_(0) , pBitmap_32f_(0) , nMaxXY_(0) , nMaxOffset_(0){ // open the bitmap pImageStack_ = FreeImage_OpenMultiBitmap(FIF_TIFF, (sFileName_ + ".tif").c_str(), FALSE, // create new TRUE, // open read-only FALSE, // keep all slices in memory TIFF_DEFAULT); NPP_ASSERT_NOT_NULL(pImageStack_); NPP_ASSERT_NOT_NULL(slices()); FIBITMAP * pBitmap = FreeImage_LockPage(pImageStack_, 0); // store away the size of the first image // this information is later used to insure that all slices // accessed are of the same size. if they are not an exception // is thrown when such a deviating slice is being accessed nWidth_ = FreeImage_GetWidth(pBitmap); nHeight_ = FreeImage_GetHeight(pBitmap); NPP_ASSERT(FreeImage_GetColorType(pBitmap) == FIC_MINISBLACK); NPP_ASSERT(FreeImage_GetBPP(pBitmap) == 8); FreeImage_UnlockPage(pImageStack_, pBitmap, FALSE);}
开发者ID:peterlu,项目名称:ConDDM,代码行数:27,
示例4: FreeImage_Invert/** @brief Inverts each pixel data.@param src Input image to be processed.@return Returns TRUE if successful, FALSE otherwise.*/BOOL DLL_CALLCONV FreeImage_Invert(FIBITMAP *src) { unsigned i, x, y, k; BYTE *bits; if (!src) return FALSE; int bpp = FreeImage_GetBPP(src); switch(bpp) { case 1 : case 4 : case 8 : { // if the dib has a colormap, just invert it // else, keep the linear grayscale if (FreeImage_GetColorType(src) == FIC_PALETTE) { RGBQUAD *pal = FreeImage_GetPalette(src); for(i = 0; i < FreeImage_GetColorsUsed(src); i++) { pal[i].rgbRed = 255 - pal[i].rgbRed; pal[i].rgbGreen = 255 - pal[i].rgbGreen; pal[i].rgbBlue = 255 - pal[i].rgbBlue; } } else { for(y = 0; y < FreeImage_GetHeight(src); y++) { bits = FreeImage_GetScanLine(src, y); for (x = 0; x < FreeImage_GetLine(src); x++) { bits[x] = ~bits[x]; } } } break; } case 24 : case 32 : { unsigned bytespp = FreeImage_GetLine(src) / FreeImage_GetWidth(src); for(y = 0; y < FreeImage_GetHeight(src); y++) { bits = FreeImage_GetScanLine(src, y); for(x = 0; x < FreeImage_GetWidth(src); x++) { for(k = 0; k < bytespp; k++) { bits[k] = ~bits[k]; } bits += bytespp; } } break; } } return TRUE;}
开发者ID:Ali-il,项目名称:gamekit,代码行数:64,
示例5: putBmpIntoPixelsvoid 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}
开发者ID:B-IT,项目名称:openFrameworks,代码行数:55,
示例6: unloadconst Texture* Texture::load(const std::string& fileName){ if (sTextureMap.find(fileName) != sTextureMap.end()) { unload(sTextureMap[fileName]); } const std::string path = sBasePath + fileName; FREE_IMAGE_FORMAT fif = FreeImage_GetFileType(path.c_str(), 0); if (fif == FIF_UNKNOWN) { fif = FreeImage_GetFIFFromFilename(path.c_str()); } if (fif == FIF_UNKNOWN) { return nullptr; } FIBITMAP* dib = nullptr; if (FreeImage_FIFSupportsReading(fif)) { dib = FreeImage_Load(fif, path.c_str()); } if (!dib) { return nullptr; } BYTE* bits = FreeImage_GetBits(dib); unsigned int width = FreeImage_GetWidth(dib); unsigned int height = FreeImage_GetHeight(dib); if (bits == 0 || width == 0 || height == 0) { return nullptr; } FREE_IMAGE_COLOR_TYPE colorType = FreeImage_GetColorType(dib); FREE_IMAGE_TYPE imageType = FreeImage_GetImageType(dib); GLenum glFormat = getGLFormat(colorType); Texture tex; tex.mName = fileName; glGenTextures(1, &tex.mId); assert(tex.mId); glBindTexture(GL_TEXTURE_2D, tex.mId); glTexImage2D(GL_TEXTURE_2D, 0, glFormat, width, height, 0, glFormat, GL_UNSIGNED_BYTE, bits); glGenerateMipmap(GL_TEXTURE_2D); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); sTextureMap[fileName] = tex; FreeImage_Unload(dib); return &sTextureMap[fileName];}
开发者ID:santisan,项目名称:santisan.github.com,代码行数:52,
示例7: FreeImage_IsTransparentBOOL DLL_CALLCONVFreeImage_IsTransparent(FIBITMAP *dib) { if(dib) { if(FreeImage_GetBPP(dib) == 32) { if(FreeImage_GetColorType(dib) == FIC_RGBALPHA) { return TRUE; } } else { return ((FREEIMAGEHEADER *)dib->data)->transparent ? TRUE : FALSE; } } return FALSE;}
开发者ID:mikanradojevic,项目名称:sdkpub,代码行数:13,
示例8: FreeImage_GetWidthstd::ostream &operator <<(std::ostream &rOutputStream, const FIBITMAP &rBitmap){ unsigned int nImageWidth = FreeImage_GetWidth(const_cast<FIBITMAP *>(&rBitmap)); unsigned int nImageHeight = FreeImage_GetHeight(const_cast<FIBITMAP *>(&rBitmap)); unsigned int nPitch = FreeImage_GetPitch(const_cast<FIBITMAP *>(&rBitmap)); unsigned int nBPP = FreeImage_GetBPP(const_cast<FIBITMAP *>(&rBitmap)); FREE_IMAGE_COLOR_TYPE eType = FreeImage_GetColorType(const_cast<FIBITMAP *>(&rBitmap)); BITMAPINFO *pInfo = FreeImage_GetInfo(const_cast<FIBITMAP *>(&rBitmap)); rOutputStream << "Size (" << FreeImage_GetWidth(const_cast<FIBITMAP *>(&rBitmap)) << ", " << FreeImage_GetHeight(const_cast<FIBITMAP *>(&rBitmap)) << ")/n"; rOutputStream << "Pitch " << FreeImage_GetPitch(const_cast<FIBITMAP *>(&rBitmap)) << "/n"; rOutputStream << "Type "; switch (eType) { case FIC_MINISWHITE: rOutputStream << "FIC_MINISWHITE/n"; break; case FIC_MINISBLACK: rOutputStream << "FIC_MINISBLACK/n"; break; case FIC_RGB: rOutputStream << "FIC_RGB/n"; break; case FIC_PALETTE: rOutputStream << "FIC_PALETTE/n"; break; case FIC_RGBALPHA: rOutputStream << "FIC_RGBALPHA/n"; break; case FIC_CMYK: rOutputStream << "FIC_CMYK/n"; break; default: rOutputStream << "Unknown pixel format./n"; } rOutputStream << "BPP " << nBPP << std::endl; return rOutputStream;}
开发者ID:chengli1986,项目名称:571e,代码行数:50,
示例9: FreeImage_GetColorTypeTypes::ColorTypes ImageLoaderFreeImage::colorDataType() const{ Types::ColorTypes colorDatatype = Types::ColorTypeRGB; const FREE_IMAGE_COLOR_TYPE imageColorType = FreeImage_GetColorType(m_bitmap); if (imageColorType == FIC_MINISBLACK || imageColorType == FIC_MINISWHITE) { colorDatatype = bitsPerPixel() == 1 ? Types::ColorTypeMonochrome : Types::ColorTypeGreyscale; } else { colorDatatype = imageColorType == FIC_PALETTE ? Types::ColorTypePalette : imageColorType == FIC_RGB ? Types::ColorTypeRGB : imageColorType == FIC_RGBALPHA ? Types::ColorTypeRGBA : /* imageColorType == FIC_CMYK ? */ Types::ColorTypeCMYK; } return colorDatatype;}
开发者ID:ockham,项目名称:posterazor,代码行数:17,
示例10: putBmpIntoPixels//----------------------------------------------------void putBmpIntoPixels(FIBITMAP * bmp, ofPixels &pix, bool swapForLittleEndian = true){ int width = FreeImage_GetWidth(bmp); int height = FreeImage_GetHeight(bmp); int bpp = FreeImage_GetBPP(bmp); FIBITMAP * bmpTemp = NULL; switch (bpp){ case 8: if (FreeImage_GetColorType(bmp) == FIC_PALETTE) { bmpTemp = FreeImage_ConvertTo24Bits(bmp); bmp = bmpTemp; bpp = FreeImage_GetBPP(bmp); } else { // do nothing we are grayscale } break; case 24: // do nothing we are color break; case 32: // do nothing we are colorAlpha break; default: bmpTemp = FreeImage_ConvertTo24Bits(bmp); bmp = bmpTemp; bpp = FreeImage_GetBPP(bmp); break; } int bytesPerPixel = bpp / 8; pix.allocate(width, height, bpp); FreeImage_ConvertToRawBits(pix.getPixels(), bmp, width*bytesPerPixel, bpp, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, true); // get bits if (bmpTemp != NULL) FreeImage_Unload(bmpTemp); #ifdef TARGET_LITTLE_ENDIAN if(swapForLittleEndian) pix.swapRgb(); #endif}
开发者ID:alfredoBorboa,项目名称:openFrameworks,代码行数:42,
示例11: IsVisualGreyscaleImage/** @brief Determines, whether a palletized image is visually greyscale or not. Unlike with FreeImage_GetColorType, which returns either FIC_MINISBLACK or FIC_MINISWHITE for a greyscale image with a linear ramp palette, the return value of this function does not depend on the palette's order, but only on the palette's individual colors. @param dib The image to be tested. @return Returns TRUE if the palette of the image specified contains only greyscales, FALSE otherwise. */static BOOLIsVisualGreyscaleImage(FIBITMAP *dib) { switch (FreeImage_GetBPP(dib)) { case 1: case 4: case 8: { unsigned ncolors = FreeImage_GetColorsUsed(dib); RGBQUAD *rgb = FreeImage_GetPalette(dib); for (unsigned i = 0; i< ncolors; i++) { if ((rgb->rgbRed != rgb->rgbGreen) || (rgb->rgbRed != rgb->rgbBlue)) { return FALSE; } } return TRUE; } default: { return (FreeImage_GetColorType(dib) == FIC_MINISBLACK); } }}
开发者ID:jrsnail,项目名称:u2project_deps,代码行数:31,
示例12: loadImage /// Load a gray-scale image from disk. void loadImage(const std::string & rFileName, ImageCPU_8u_C1 & rImage) { // set your own FreeImage error handler FreeImage_SetOutputMessage(FreeImageErrorHandler); FREE_IMAGE_FORMAT eFormat = FreeImage_GetFileType(rFileName.c_str()); // no signature? try to guess the file format from the file extension if (eFormat == FIF_UNKNOWN) eFormat = FreeImage_GetFIFFromFilename(rFileName.c_str()); NPP_ASSERT(eFormat != FIF_UNKNOWN); // check that the plugin has reading capabilities ... FIBITMAP * pBitmap; if (FreeImage_FIFSupportsReading(eFormat)) pBitmap = FreeImage_Load(eFormat, rFileName.c_str()); NPP_ASSERT(pBitmap != 0); // make sure this is an 8-bit single channel image NPP_ASSERT(FreeImage_GetColorType(pBitmap) == FIC_MINISBLACK); NPP_ASSERT(FreeImage_GetBPP(pBitmap) == 8); // create an ImageCPU to receive the loaded image data ImageCPU_8u_C1 oImage(FreeImage_GetWidth(pBitmap), FreeImage_GetHeight(pBitmap)); // Copy the FreeImage data into the new ImageCPU unsigned int nSrcPitch = FreeImage_GetPitch(pBitmap); const Npp8u * pSrcLine = FreeImage_GetBits(pBitmap) + nSrcPitch * (FreeImage_GetHeight(pBitmap) -1); Npp8u * pDstLine = oImage.data(); unsigned int nDstPitch = oImage.pitch(); for (size_t iLine = 0; iLine < oImage.height(); ++iLine) { memcpy(pDstLine, pSrcLine, oImage.width() * sizeof(Npp8u)); pSrcLine -= nSrcPitch; pDstLine += nDstPitch; } // swap the user given image with our result image, effecively // moving our newly loaded image data into the user provided shell oImage.swap(rImage); }
开发者ID:D2LSystem,项目名称:GPU-Computing-SDK-4.2.9,代码行数:40,
示例13: putBmpIntoPixelsvoid 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}
开发者ID:prettyextreme,项目名称:openFrameworks-0.7,代码行数:38,
示例14: FreeImage_IsTransparentBOOL DLL_CALLCONVFreeImage_IsTransparent(FIBITMAP *dib) { if(dib) { FREE_IMAGE_TYPE image_type = FreeImage_GetImageType(dib); switch(image_type) { case FIT_BITMAP: if(FreeImage_GetBPP(dib) == 32) { if(FreeImage_GetColorType(dib) == FIC_RGBALPHA) { return TRUE; } } else { return ((FREEIMAGEHEADER *)dib->data)->transparent ? TRUE : FALSE; } break; case FIT_RGBA16: case FIT_RGBAF: return TRUE; default: break; } } return FALSE;}
开发者ID:2php,项目名称:ogre-android,代码行数:23,
示例15: FreeImage_GetColorTypeFREE_IMAGE_COLOR_TYPE fipImage::getColorType() const { return FreeImage_GetColorType(_dib);}
开发者ID:MrMasterplan,项目名称:PIC-stuff,代码行数:3,
示例16: load virtual bool load(const std::string& filename, Array &lat) { FREE_IMAGE_FORMAT type = FreeImage_GetFIFFromFilename(filename.c_str()); if(type == FIF_UNKNOWN) { AL_WARN("image format not recognized: %s", filename.c_str()); return false; } if(!FreeImage_FIFSupportsReading(type)) { AL_WARN("image format not supported: %s", filename.c_str()); return false; } destroy(); mImage = FreeImage_Load(type, filename.c_str(), 0); if (mImage == NULL) { AL_WARN("image failed to load: %s", filename.c_str()); return false; } FREE_IMAGE_COLOR_TYPE colorType = FreeImage_GetColorType(mImage); switch(colorType) { case FIC_MINISBLACK: case FIC_MINISWHITE: { FIBITMAP *res = FreeImage_ConvertToGreyscale(mImage); FreeImage_Unload(mImage); mImage = res; } break; case FIC_PALETTE: { if(FreeImage_IsTransparent(mImage)) { FIBITMAP *res = FreeImage_ConvertTo32Bits(mImage); FreeImage_Unload(mImage); mImage = res; } else { FIBITMAP *res = FreeImage_ConvertTo24Bits(mImage); FreeImage_Unload(mImage); mImage = res; } } break; case FIC_CMYK: { AL_WARN("CMYK images currently not supported"); return false; } break; default: break; } // flip vertical for OpenGL: //FreeImage_FlipVertical(mImage); //Freeimage is not tightly packed, so we use //a custom method instead of one of the Matrix //utility methods int planes = getPlanes(); AlloTy ty = getDataType(); int w, h; getDim(w, h); lat.format(planes, ty, w, h); Image::Format format = Image::getFormat(planes); switch(format) { case Image::LUMINANCE: { char *o_pix = (char *)(lat.data.ptr); int rowstride = lat.header.stride[1]; for(unsigned j = 0; j < lat.header.dim[1]; ++j) { char *pix = (char *)FreeImage_GetScanLine(mImage, j); memcpy(o_pix, pix, rowstride); o_pix += rowstride; } } break; case Image::RGB: { switch(lat.header.type) { case AlloUInt8Ty: { char *bp = (char *)(lat.data.ptr); int rowstride = lat.header.stride[1]; for(unsigned j = 0; j < lat.header.dim[1]; ++j) { RGBTRIPLE * pix = (RGBTRIPLE *)FreeImage_GetScanLine(mImage, j); Image::RGBPix<uint8_t> *o_pix = (Image::RGBPix<uint8_t> *)(bp + j*rowstride); for(unsigned i=0; i < lat.header.dim[0]; ++i) { o_pix->r = pix->rgbtRed; o_pix->g = pix->rgbtGreen; o_pix->b = pix->rgbtBlue; ++pix; ++o_pix; } } } break; case AlloFloat32Ty: { char *o_pix = (char *)(lat.data.ptr); int rowstride = lat.header.stride[1];//.........这里部分代码省略.........
开发者ID:AlloSphere-Research-Group,项目名称:alive,代码行数:101,
示例17: LoadOS21XBMP//.........这里部分代码省略......... for (int count = 0; count < used_colors; count++) { FILE_BGR bgr; io->read_proc(&bgr, sizeof(FILE_BGR), 1, handle); pal[count].rgbRed = bgr.r; pal[count].rgbGreen = bgr.g; pal[count].rgbBlue = bgr.b; } // Skip over the optional palette // A 24 or 32 bit DIB may contain a palette for faster color reduction io->seek_proc(handle, bitmap_bits_offset, SEEK_SET); // read the pixel data if (height > 0) { io->read_proc((void *)FreeImage_GetBits(dib), height * pitch, 1, handle); } else { for (int c = 0; c < abs(height); ++c) { io->read_proc((void *)FreeImage_GetScanLine(dib, height - c - 1), pitch, 1, handle); } } return dib; } case 16 : { dib = FreeImage_Allocate(width, height, bit_count, FI16_555_RED_MASK, FI16_555_GREEN_MASK, FI16_555_BLUE_MASK); if (dib == NULL) throw "DIB allocation failed"; BITMAPINFOHEADER *pInfoHeader = FreeImage_GetInfoHeader(dib); pInfoHeader->biXPelsPerMeter = 0; pInfoHeader->biYPelsPerMeter = 0; io->read_proc(FreeImage_GetBits(dib), height * pitch, 1, handle);#ifdef FREEIMAGE_BIGENDIAN for(int y = 0; y < FreeImage_GetHeight(dib); y++) { WORD *pixel = (WORD *)FreeImage_GetScanLine(dib, y); for(int x = 0; x < FreeImage_GetWidth(dib); x++) { SwapShort(pixel); pixel++; } }#endif return dib; } case 24 : case 32 : { if( bit_count == 32 ) { dib = FreeImage_Allocate(width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); } else { dib = FreeImage_Allocate(width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); } if (dib == NULL) throw "DIB allocation failed"; BITMAPINFOHEADER *pInfoHeader = FreeImage_GetInfoHeader(dib); pInfoHeader->biXPelsPerMeter = 0; pInfoHeader->biYPelsPerMeter = 0; // Skip over the optional palette // A 24 or 32 bit DIB may contain a palette for faster color reduction io->read_proc(FreeImage_GetBits(dib), height * pitch, 1, handle);#ifdef FREEIMAGE_BIGENDIAN for(int y = 0; y < FreeImage_GetHeight(dib); y++) { BYTE *pixel = FreeImage_GetScanLine(dib, y); for(int x = 0; x < FreeImage_GetWidth(dib); x++) { INPLACESWAP(pixel[0], pixel[2]); pixel += (bit_count>>3); } }#endif // check if the bitmap contains transparency, if so enable it in the header FreeImage_SetTransparent(dib, (FreeImage_GetColorType(dib) == FIC_RGBALPHA)); return dib; } } } catch(const char *message) { if(dib) FreeImage_Unload(dib); FreeImage_OutputMessageProc(s_format_id, message); } return NULL;}
开发者ID:MichaelH13,项目名称:sdkpub,代码行数:101,
示例18: LoadOS22XBMP//.........这里部分代码省略......... break; }; } break; } default : throw "compression type not supported"; } break; } case 16 : { if (bih.biCompression == 3) { DWORD bitfields[3]; io->read_proc(bitfields, 3 * sizeof(DWORD), 1, handle); dib = FreeImage_Allocate(width, height, bit_count, bitfields[0], bitfields[1], bitfields[2]); } else { dib = FreeImage_Allocate(width, height, bit_count, FI16_555_RED_MASK, FI16_555_GREEN_MASK, FI16_555_BLUE_MASK); } if (dib == NULL) throw "DIB allocation failed"; BITMAPINFOHEADER *pInfoHeader = FreeImage_GetInfoHeader(dib); pInfoHeader->biXPelsPerMeter = bih.biXPelsPerMeter; pInfoHeader->biYPelsPerMeter = bih.biYPelsPerMeter; if (bitmap_bits_offset > (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (used_colors * 3))) io->seek_proc(handle, bitmap_bits_offset, SEEK_SET); io->read_proc(FreeImage_GetBits(dib), height * pitch, 1, handle);#ifdef FREEIMAGE_BIGENDIAN for(int y = 0; y < FreeImage_GetHeight(dib); y++) { WORD *pixel = (WORD *)FreeImage_GetScanLine(dib, y); for(int x = 0; x < FreeImage_GetWidth(dib); x++) { SwapShort(pixel); pixel++; } }#endif return dib; } case 24 : case 32 : { if( bit_count == 32 ) { dib = FreeImage_Allocate(width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); } else { dib = FreeImage_Allocate(width, height, bit_count, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK); } if (dib == NULL) throw "DIB allocation failed"; BITMAPINFOHEADER *pInfoHeader = FreeImage_GetInfoHeader(dib); pInfoHeader->biXPelsPerMeter = bih.biXPelsPerMeter; pInfoHeader->biYPelsPerMeter = bih.biYPelsPerMeter; // Skip over the optional palette // A 24 or 32 bit DIB may contain a palette for faster color reduction if (bitmap_bits_offset > (sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (used_colors * 3))) io->seek_proc(handle, bitmap_bits_offset, SEEK_SET); // read in the bitmap bits io->read_proc(FreeImage_GetBits(dib), height * pitch, 1, handle);#ifdef FREEIMAGE_BIGENDIAN for(int y = 0; y < FreeImage_GetHeight(dib); y++) { BYTE *pixel = FreeImage_GetScanLine(dib, y); for(int x = 0; x < FreeImage_GetWidth(dib); x++) { INPLACESWAP(pixel[0], pixel[2]); pixel += (bit_count>>3); } }#endif // check if the bitmap contains transparency, if so enable it in the header FreeImage_SetTransparent(dib, (FreeImage_GetColorType(dib) == FIC_RGBALPHA)); return dib; } } } catch(const char *message) { if(dib) FreeImage_Unload(dib); FreeImage_OutputMessageProc(s_format_id, message); } return NULL;}
开发者ID:MichaelH13,项目名称:sdkpub,代码行数:101,
示例19: FreeImage_GetMetadata |