#include #include #include WORD CrossDissolve::crossDissolve(Block &srcImage,Block &dstImage) { Block dissolveSchedule; size_t srcSize((int)srcImage.size()); if(!srcSize)return FALSE; Schedule::createSchedule(dissolveSchedule,srcSize); for(int i=0;i dissolveSchedule; if(!nFrames)return FALSE; Schedule::createSchedule(dissolveSchedule,nFrames); for(int i=0;i &sourceBlock,Block &destBlock,Block &dissolveSchedule) { size_t size((int)sourceBlock.size()); if(!size)return FALSE; if(size!=destBlock.size())return FALSE; if(size!=dissolveSchedule.size())return FALSE; for(int i=0;iisOkay()||!lpDstBitmap->isOkay()) { delete lpSrcBitmap; delete lpDstBitmap; return returnCode; } hGlobalSrcImageData=lpSrcBitmap->lockedImageData(); hGlobalDstImageData=lpDstBitmap->lockedImageData(); hGlobalSrcBitmapInfo=lpSrcBitmap->lockedBitmapInfo(); hGlobalDstBitmapInfo=lpDstBitmap->lockedBitmapInfo(); lpSrcImageData=(UHUGE*)::GlobalLock(hGlobalSrcImageData); lpDstImageData=(UHUGE*)::GlobalLock(hGlobalDstImageData); lpSrcBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalSrcBitmapInfo); lpDstBitmapInfo=(BITMAPINFO FAR *)::GlobalLock(hGlobalDstBitmapInfo); if(lpSrcBitmapInfo->bmiHeader.biWidth==lpDstBitmapInfo->bmiHeader.biWidth&& lpSrcBitmapInfo->bmiHeader.biHeight==lpDstBitmapInfo->bmiHeader.biHeight&& ((8==lpSrcBitmapInfo->bmiHeader.biBitCount)&&(8==lpDstBitmapInfo->bmiHeader.biBitCount))) { sizeImage=(LONG)lpSrcBitmapInfo->bmiHeader.biWidth*(LONG)lpSrcBitmapInfo->bmiHeader.biHeight; hGlobalHistogram=::GlobalAlloc(GMEM_FIXED,sizeImage*(LONG)sizeof(LONG)); lpHistogram=(LHUGE*)::GlobalLock(hGlobalHistogram); for(LONG imageOffset=0;imageOffsetbmiColors[*(lpSrcImageData+imageOffset)]; dstRGB=&lpDstBitmapInfo->bmiColors[*(lpDstImageData+imageOffset)]; outRGB.rgbRed=srcRGB->rgbRed*srcWeight+dstRGB->rgbRed*dstWeight; outRGB.rgbGreen=srcRGB->rgbGreen*srcWeight+dstRGB->rgbGreen*dstWeight; outRGB.rgbBlue=srcRGB->rgbBlue*srcWeight+dstRGB->rgbBlue*dstWeight; *(lpHistogram+imageOffset)=RGB((BYTE)(outRGB.rgbRed/100L),(BYTE)(outRGB.rgbGreen/100L),(BYTE)(outRGB.rgbBlue/100L)); } delete lpDstBitmap; hPalette=createBlendedPalette(lpHistogram,sizeImage); for(imageOffset=0;imageOffset sortedBIT32; QuickSort sortedColorCount; Block blockedColors; Vector vectoredColors; Vector vectoredColorCount; vectoredColors.size(sizeImage); for(LONG i=0;i &vectoredColors,Block &blockedColors) { BIT32 prevColor; LONG equalColors; LONG sizeImage(vectoredColors.size()); for(LONG i=0;i &blockedColors) { PALETTEENTRY FAR *lpPaletteEntry; LOGPALETTE FAR *lpLogPalette; HGLOBAL hGlobalPalette; HPALETTE hPalette; size_t paletteSize((int)blockedColors.size()); while((paletteSize=(int)blockedColors.size())palNumEntries=paletteSize; lpLogPalette->palVersion=0x300; for(int i=0;ipalPalEntry[i]; lpPaletteEntry->peRed=GetRValue(blockedColors[i].color()); lpPaletteEntry->peGreen=GetGValue(blockedColors[i].color()); lpPaletteEntry->peBlue=GetBValue(blockedColors[i].color()); lpPaletteEntry->peFlags=0; } hPalette=::CreatePalette((LOGPALETTE FAR *)lpLogPalette); ::GlobalUnlock(hGlobalPalette); ::GlobalFree(hGlobalPalette); return hPalette; }