2013-05-12 4 views
0

Я знаю, что изображения по умолчанию на сетчатых устройствах по умолчанию, но по умолчанию масштабирование делает изображения размытыми.Ускорение изображений на устройствах Retina

Мне было интересно, есть ли способ масштабировать его в режиме ближайших соседей, где нет прозрачных пикселей, но каждый пиксель умножается на 4, поэтому он выглядит так, как будто это было бы на устройстве не сетчатки.

Пример того, о чем я говорю, можно увидеть на изображении ниже. example http://cclloyd.com/downloads/sdfsdf.png

ответ

0

CoreGraphics не будет делать так называемую шкалу 2x, вам нужно написать немного явной логики отображения пикселей, чтобы сделать что-то подобное. Ниже приведен некоторый код, который я использовал для этой операции, вам, конечно же, нужно будет заполнить детали, поскольку это работает на входном буфере пикселей и записывается в выходной буфер пикселей, который больше 2x.

// Use special case "DOUBLE" logic that will simply duplicate the exact 
    // RGB value from the indicated pixel into the 2x sized output buffer. 

    int numOutputPixels = resizedFrameBuffer.width * resizedFrameBuffer.height; 

    uint32_t *inPixels32 = (uint32_t*)cgFrameBuffer.pixels; 
    uint32_t *outPixels32 = (uint32_t*)resizedFrameBuffer.pixels; 

    int outRow = 0; 
    int outColumn = 0; 

    for (int i=0; i < numOutputPixels; i++) { 
    if ((i > 0) && ((i % resizedFrameBuffer.width) == 0)) { 
     outRow += 1; 
     outColumn = 0; 
    } 

    // Divide by 2 to get the column/row in the input framebuffer 
    int inColumn = outColumn/2; 
    int inRow = outRow/2; 

    // Get the pixel for the row and column this output pixel corresponds to 
    int inOffset = (inRow * cgFrameBuffer.width) + inColumn; 
    uint32_t pixel = inPixels32[inOffset]; 

    outPixels32[i] = pixel; 

    //fprintf(stdout, "Wrote 0x%.10X for 2x row/col %d %d (%d), read from row/col %d %d (%d)\n", pixel, outRow, outColumn, i, inRow, inColumn, inOffset); 

    outColumn += 1; 
    } 

Этот код, конечно, зависит от того, создается ли буфер с пикселями, а затем завертывается в CFImageRef. Но вы можете найти весь код, чтобы сделать что-то легко.

Смежные вопросы