How do I leave some invisible image on love2d?

6

How do I set the visibility of some image in Love2d? Like for example, let it 10%, 25% or 50% visible.

    
asked by anonymous 05.01.2017 / 00:26

2 answers

5

An alternative to my comment and my previous response is to use the setColor method before drawing the image.

local opacidade = .5; -- de 0 à 1
love.graphics.setColor(0xFF, 0xFF, 0xFF,
    0xFF * opacidade);

Or without fractions:

local opacidade = 255; // de 0 à 255
love.graphics.setColor(0xFF, 0xFF, 0xFF, opacidade);

Setting transparency

On first use, opacity (transparency) is defined using a number ranging from 0 to 1, which optionally contains decimals. 0 is 0% visible and 1 is 100% visible. .5 (or 0.5 ) is 50% visible. This can be more specific, for example: .55559 .

In the second use, the opacity is defined using an integer ranging from 0 to 255. 0 is 0% visible and 255 is 100% visible. 127 is almost 50% visible.

Example:

local Imagem1, opacidade;

opacidade = .5; -- 50%

function love.load()
    Imagem1 = love.graphics.newImage 'test.png';
end

function love.draw()
    -- setColor vem antes...
    love.graphics.setColor(0xFF, 0xFF, 0xFF,
        0xFF * opacidade);
    -- de draw.
    love.graphics.draw(Imagem1);
end

Example repeating image 3 times:

local imagem1;

function love.load()
    -- Carrega a imagem
    imagem1 = love.graphics.newImage 'test.png';
end

function love.draw()
    -- #Duplicata1 20% visível (No canto.)
    love.graphics.setColor(0xFF, 0xFF, 0xFF, .2 * 0xFF);
    love.graphics.draw(imagem1);

    -- #Duplicata2 50% visível (No meio.)
    love.graphics.setColor(0xFF, 0xFF, 0xFF, .5 * 0xFF);
    love.graphics.draw(imagem1, 150);

    -- #Duplicata3 100% visível (Em cima de todas.)
    love.graphics.setColor(0xFF, 0xFF, 0xFF, 0xFF);
    love.graphics.draw(imagem1, 350);
end
    
05.01.2017 / 14:15
1

Based on my comment, you can set the visibility of an image by copying its data, mapping its pixels to the alpha field, and then creating another image using the modified data.

You only need to do this once if visibility needs to be set.

Demonstration

This example should work with common images (BMP, JPEG, and PNG):

local imagem2;

function love.load()
    -- Carrega a imagem
    local imagem1 = love.graphics.newImage 'test.png';

    -- Pega seus dados
    local imageData = imagem1:getData();

    --[=[ https://love2d.org/wiki/CompressedImageData
       Adiciona um erro para dados compressos
     * (dados compressos vem de imagens
     * do formato DXT1, DXT5, and BC5 / 3Dc, raramente usados).
     * Eu pessoalmente não sei que dados são e como funcionam.
     * O seu uso mais comum será BMP, JPEG ou PNG, creio eu. ]=]
    assert(not imagem1:isCompressed(),
        'Formato de imagem desconhecido');

    -- A opacidade vai de 0 até 1
    local opacidade = .2;

    -- Muda a opacidade de cada pixel
    imageData:mapPixel(function(x, y, r, g, b, a)
        return r, g, b, a * opacidade;
    end);

    imagem2 = love.graphics.newImage(imageData);
end

function love.draw()
    love.graphics.draw(imagem2);
end
    
05.01.2017 / 12:03