Exemplo n.º 1
0
void ImageScale2x(uchar *src,uchar* dst,int w,int h) {
    ushort *buf16 = new ushort[w*h*2];
    uchar  *buf32 = new uchar[w*h*4*4];

	switch( HQScaleType ) {
		case SCLT_SCALE2X:
			//ImageHQShadow(src,w,h);
			Scale2x(src,dst,w,h);
			break;
		case SCLT_HQ2X:

			Conv32_16(src,buf16,w,h);

			//skalujemy kolory
			InitLUTs();	//TODO: moze wystarczy tylko raz wywolac?
			hq2x_32( (uchar*)buf16, dst, w, h, w*2*4 );

			//skalujemy kanal alpha
			Conv32A_16(src,buf16,w,h);
			hq2x_32( (uchar*)buf16, buf32, w, h, w*2*4 );

			//laczymy kolory i kanal alpha
			SetAlphaG(dst,w*2,h*2,buf32);

			delete[] buf32;
			delete[] buf16;

			break;
		default:
			break;
	}
}
Exemplo n.º 2
0
EXPORT(void) FlipScreen()
{
    if (SDL_MUSTLOCK(SDLScreenBuffer))
        if (SDL_LockSurface(SDLScreenBuffer) != 0)
            return;

    int pitch = SDLScreenBuffer->pitch / sizeof(BGRA);

    if (Config.scale)
    {

        switch (Config.filter)
        {

            case I_NONE:
                DirectScale((dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_SCALE2X:
                Scale2x(    (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_EAGLE:
                Eagle(      (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_HQ2X:
                hq2x(       (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_2XSAI:
                _2xSaI(     (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_SUPER_2XSAI:
                Super2xSaI( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

            case I_SUPER_EAGLE:
                SuperEagle( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight);
                break;

        }
    }
    else
    {
        BGRA* dst = (BGRA*)SDLScreenBuffer->pixels;
        BGRA* src = ScreenBuffer;

        for (int i = 0; i < ScreenBufferHeight; ++i)
        {
            memcpy(dst, src, ScreenBufferWidth * sizeof(BGRA));
            dst += pitch;
            src += ScreenBufferWidth;
        }
    }

    if (SDL_MUSTLOCK(SDLScreenBuffer))
        SDL_UnlockSurface(SDLScreenBuffer);

    SDL_Flip(SDLScreenBuffer);

}