int ConvertPixelFormat(void* InputAddr,void* OutputAddr, DWORD NbPixels, DDPIXELFORMAT *InputPixelFormat, DDPIXELFORMAT *OutputPixelFormat) { if((InputPixelFormat->dwFlags & OutputPixelFormat->dwFlags & DDPF_RGB) == 0) { ERR("Cannot convert non-RGB pixelformats\n"); return 1; //Fail } // "if" closed unsigned int CountBit2; unsigned int InputMaxValue_Red=0; unsigned int OutputMaxValue_Red=0; unsigned int InputMaxValue_Green=0; unsigned int OutputMaxValue_Green=0; unsigned int InputMaxValue_Blue=0; unsigned int OutputMaxValue_Blue=0; unsigned int InputMaxValue_Alpha=0; unsigned int OutputMaxValue_Alpha=0; DWORD CountBit=1; for(CountBit=0;CountBit<32;CountBit++) { if((OutputPixelFormat->u2.dwRBitMask) & (1 << CountBit)) OutputMaxValue_Red++; if((InputPixelFormat->u2.dwRBitMask) & (1 << CountBit)) InputMaxValue_Red++; if((OutputPixelFormat->u3.dwGBitMask) & (1 << CountBit)) OutputMaxValue_Green++; if((InputPixelFormat->u3.dwGBitMask) & (1 << CountBit)) InputMaxValue_Green++; if((OutputPixelFormat->u4.dwBBitMask) & (1 << CountBit)) OutputMaxValue_Blue++; if((InputPixelFormat->u4.dwBBitMask) & (1 << CountBit)) InputMaxValue_Blue++; if((OutputPixelFormat->u5.dwRGBAlphaBitMask) & (1 << CountBit)) OutputMaxValue_Alpha++; if((InputPixelFormat->u5.dwRGBAlphaBitMask) & (1 << CountBit)) InputMaxValue_Alpha++; } unsigned int InputBytePerPixel = InputPixelFormat->u1.dwRGBBitCount / 8; unsigned int OutputBytePerPixel = OutputPixelFormat->u1.dwRGBBitCount / 8; DWORD Pixel; DWORD output; DWORD * OutputPixel; DWORD * InputPixel; float RedMultiplier = ((float)(2<<(OutputMaxValue_Red-1))-1)/((float)(2<<(InputMaxValue_Red-1))-1); float BlueMultiplier = ((float)(2<<(OutputMaxValue_Blue-1))-1)/((float)(2<<(InputMaxValue_Blue-1))-1); float GreenMultiplier = ((float)(2<<(OutputMaxValue_Green-1))-1)/((float)(2<<(InputMaxValue_Green-1))-1); float AlphaMultiplier = ((float)(2<<(OutputMaxValue_Alpha-1))-1)/((float)(2<<(InputMaxValue_Alpha-1))-1); for(Pixel=0;Pixelu2.dwRBitMask != 0 && OutputPixelFormat->u2.dwRBitMask != 0 ) { output = 0; for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((InputPixelFormat->u2.dwRBitMask) & (1<>CountBit) & 1)<<(CountBit2++); output=(DWORD) (((float)output)*RedMultiplier); CountBit2 = 0; for(CountBit=0;CountBit<32;CountBit++) if((OutputPixelFormat->u2.dwRBitMask) & (1<> (CountBit2++)) & 1) << CountBit; } // "if" closed //Green: if(InputPixelFormat->u3.dwGBitMask != 0 && OutputPixelFormat->u3.dwGBitMask != 0 ) { output = 0; for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((InputPixelFormat->u3.dwGBitMask) & (1<>CountBit) & 1)<<(CountBit2++); output=(DWORD) (((float)output)*GreenMultiplier); for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((OutputPixelFormat->u3.dwGBitMask) & (1<> (CountBit2++)) & 1) << CountBit; } // "if" closed //Blue: if(InputPixelFormat->u4.dwBBitMask != 0 && OutputPixelFormat->u4.dwBBitMask != 0 ) { output = 0; for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((InputPixelFormat->u4.dwBBitMask) & (1<>CountBit) & 1)<<(CountBit2++); output=(DWORD) (((float)output)*BlueMultiplier); for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((OutputPixelFormat->u4.dwBBitMask) & (1<> (CountBit2++)) & 1) << CountBit; } // "if" closed //Alpha: if(InputPixelFormat->u5.dwRGBAlphaBitMask != 0 && OutputPixelFormat->u5.dwRGBAlphaBitMask != 0 ) { output = 0; for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((InputPixelFormat->u5.dwRGBAlphaBitMask) & (1<>CountBit) & 1)<<(CountBit2++); output=(DWORD) (((float)output)*AlphaMultiplier); for(CountBit=CountBit2=0;CountBit<32;CountBit++) if((OutputPixelFormat->u5.dwRGBAlphaBitMask) & (1<> (CountBit2++)) & 1) << CountBit; } // "if" closed } // "for" closed return 0; } // function closed