整理:CxImage操作

/** * CxImage转成位图流 */ CxImage cxImag; //操作CxImage... BYTE * buffer = NULL; long size = 0; DWORD imagetype = CXIMAGE_FORMAT_BMP; BOOL bRc = FALSE; bRc = imag.Encode(buffer, size, imagetype);

/** * @name ChangePixelRGB * @brief 更换像素rgb * @param CxImage *pImage 要操作的CxImage指针 * @param int rSrc,int gSrc,int bSrc 原始的rgb * @param int rDst,int gDst,int bDst 要改变成的rgb * @return INT * @retval S_OK, 成功 * @retval S_FALSE, 失败 */ int ChangePixelRGB(CxImage *pImage,int rSrc,int gSrc,int bSrc, int rDst,int gDst,int bDst) { long x = 0; long y = 0; long cx = 0; long cy = 0; RGBQUAD rgbOld; RGBQUAD rgbNew; if(!pImage->IsValid()) return S_FALSE; if (!(((rSrc >= 0) && (rSrc <= 255)) && ((gSrc >= 0) && (gSrc <= 255)) && ((bSrc >= 0) && (bSrc <= 255)) && ((rDst >= 0) && (rDst <= 255)) && ((gDst >= 0) && (gDst <= 255)) && ((bDst >= 0) && (bDst <= 255)))) return S_FALSE; rgbNew.rgbBlue = rDst; rgbNew.rgbGreen = gDst; rgbNew.rgbRed = bDst; rgbNew.rgbReserved = 0; cx = pImage->GetWidth(); cy = pImage->GetHeight(); for(y=0; y<cy; y++) { for(x=0;x<cx; x++) { rgbOld = pImage->GetPixelColor(x, y, FALSE); if((rgbOld.rgbBlue == rSrc) && (rgbOld.rgbGreen == gSrc) && (rgbOld.rgbRed == bSrc)) { /* @note * 修改上面的像素转换条件, 做别的用途 * 修改像素更换为一个rgb范围 * 应用1, 去黑点 * 应用2, 把混杂底色换成纯底色 * 应用3, 根据源像素周围的rgb对比, 对图像进行锐化或羽化 */ pImage->SetPixelColor(x, y, rgbNew, FALSE); } } } return S_OK; }

<2010_1229>

/** * @brief * CxImage从位图流中得到位图数据 */ CxImage cxImage_a; PBYTE pucBmpdata;//已经从位图中读出了数据 long dwLenBmpdata;//实际位图数据的Size, 对应于pucBmpdata //这幅位图对应的资源类型是*.bmp cxImage_a.Decode(pucBmpdata, dwLenBmpdata, CXIMAGE_FORMAT_BMP); if(!cxImage_a.IsValid()) { LsLogError("位图数据无效"); return S_FALSE; } else { if(!cxImage_a.IsGrayScale()) cxImage_a.IncreaseBpp(24); cxImage_a.SetJpegQuality(99);//如果要保存成jpg资源, 需要设置 }

 

你可能感兴趣的:(整理:CxImage操作)