EditableImage

Mostrar obsoleto

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Não criável

EditableImage permite a criação e manipulação de imagens em tempo de execução.

Para criar um vazio EditableImage , use AssetService:CreateEditableImage() . Para criar um EditableImage a partir de uma imagem existente, use AssetService:CreateEditableImageAsync() .

EditableImage pode ser usado em qualquer propriedade Content que tome uma imagem, como ImageLabel.ImageContent ou MeshPart.TextureContent.Isso é feito definindo a propriedade de conteúdo para Content.fromObject(editableImage) .

O sistema de coordenadas EditableImage é relativo ao canto superior esquerdo da imagem:

  • Top-esquerda: (0, 0)
  • Inferior direita: (Size.X - 1, Size.Y - 1)

Quando você usa AssetService:PromptCreateAssetAsync() para publicar um objeto que tem uma propriedade Content que se refere a um EditableImage , a imagem editável é publicada como uma imagem e a propriedade é definida para um novo ID de recurso.

Atualizar Limitações

Apenas um único EditableImage pode ser atualizado por quadro no lado de exibição.Por exemplo, se você atualizar três objetos EditableImage que estão sendo exibidos no momento, levará três quadros para que todos sejam atualizados.

Habilitando Experiências Publicadas

Para fins de segurança, usar EditableImage falha por padrão para experiências publicadas.Para habilitar o uso, você deve ter idade 13+ verificada e ID verificada.Depois de verificado, abra as Configurações de Jogo do Studio, selecione Segurança e ative o botão Permitir APIs de Malha/Imagem .

Permissões

Para evitar o uso indevido, AssetService:CreateEditableImageAsync() permite apenas carregar e editar recursos de imagem:

  • Que são de propriedade do criador da experiência (se a experiência for de propriedade de um indivíduo).
  • Que pertencem a um grupo (se a experiência for de propriedade do grupo).
  • Que são de propriedade do usuário do Studio logado (se o arquivo do lugar ainda não foi salvo ou publicado no Roblox).

As APIs lançam um erro se forem usadas para carregar um recurso que não atenda aos critérios acima.

Limites de Memória

Recursos editáveis são atualmente caros para uso de memória.Para minimizar seu impacto no desempenho do cliente, EditableImage tem orçamentos de memória rigorosos do lado do cliente, embora o servidor, o Studio e os plugins operem com memória ilimitada.Vincular um EditableImage a vários tipos de dados relacionados a imagens Content (multiresposta) pode ajudar com a otimização de memória.

Resumo

Propriedades

  • Somente leitura
    Não replicado
    Ler Parallel

    Tamanho do EditableImage em pixels.

Métodos

Propriedades

Somente leitura
Não replicado
Ler Parallel

Tamanho do EditableImage em pixels.O tamanho máximo é 1024×1024.Um EditableImage não pode ser redimensionado; esta propriedade é apenas leitura.Para redimensionar ou cortar uma imagem, crie um novo EditableImage e use DrawImageTransformed() para transferir o conteúdo; então chame Destroy() .

Métodos

Destroy

()

Destrói o conteúdo da imagem, imediatamente recuperando memória usada.


Devolução

()

DrawCircle

()

Desenha um círculo no ponto especificado no EditableImage.Se o círculo for semitransparente, ele será misturado com os pixels atrás dele usando sobreposição de origem.

Parâmetros

center: Vector2

Centro do círculo, em relação ao canto superior esquerdo do EditableImage. Posições fora dos limites da tela são permitidas.

Valor Padrão: ""
radius: number

Raio do círculo em pixels.

Valor Padrão: ""
color: Color3

Coração do círculo.

Valor Padrão: ""
transparency: number

Transparência do círculo com 0 sendo totalmente opaco e 1 sendo totalmente transparente.

Valor Padrão: ""

Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.

Valor Padrão: ""

Devolução

()

DrawImage

()

Desenha outro EditableImage neste EditableImage na posição dada.Posições fora dos limites da tela são permitidas para que apenas uma parte da nova imagem seja desenhada.

Parâmetros

position: Vector2

Posição em que o canto superior esquerdo da imagem adicionada será desenhado.

Valor Padrão: ""

O EditableImage para desenhar neste EditableImage.

Valor Padrão: ""

Como os pixels da imagem de origem devem ser misturados com os pixels da imagem adicionada.

Valor Padrão: ""

Devolução

()

DrawImageProjected

()

Projeta outro EditableImage em um EditableMesh e armazena o resultado neste EditableImage usando a configuração de projeção e pincel especificada.

Parâmetros

O EditableMesh usado para projetar.

Valor Padrão: ""
projection: Dictionary

Dicionário de configuração de projeção incluindo os seguintes pares de chave-valor:

  • Direction ( Vector3 ) onde o projetor está voltado.
  • Position ( Vector3 ) como a posição no espaço local em relação à malha.
  • Size ( Vector3 ) como o tamanho do projetor.
  • Up ( Vector3 ) como o vetor de subida do projetor no espaço local em relação à malha.
Valor Padrão: ""
brushConfig: Dictionary

Dicionário de configuração de pincel, incluindo os seguintes pares de chave-valor:

  • AlphaBlendType ( Enum.ImageAlphaType ) que determina como essa projeção vai misturar os valores alfa.
  • ColorBlendType ( Enum.ImageCombineType ) que determina como essa projeção vai misturar valores de cores.
  • Decal ( EditableImage ) como a imagem usada para projeção.
  • FadeAngle (number) como o ângulo em graus para que os cantos de projeção caiam.
  • BlendIntensity (number) como o valor entre 0 e 1 que controla quanto da projeção é misturado na imagem resultante.
Valor Padrão: ""

Devolução

()

DrawImageTransformed

()

Este método permite que você desenhe um EditableImage neste EditableImage com transformações aplicadas, como escalonamento e rotação.O parâmetro de posição especifica onde o ponto de pivô da imagem de origem será colocado nesta imagem após as transformações.Posições fora dos limites da tela são permitidas para que apenas uma parte da nova imagem seja desenhada.

Parâmetros

position: Vector2

Posição em pixels onde o ponto de pivô da imagem de origem será colocado nesta imagem.

Valor Padrão: ""
scale: Vector2

Fatores de escalonamento para a imagem de origem ao longo dos eixos X e Y.

Valor Padrão: ""
rotation: number

O ângulo de rotação em graus, aplicado ao redor do ponto de pivô da imagem de origem.

Valor Padrão: ""

A fonte EditableImage para ser desenhada nesta imagem.

Valor Padrão: ""
options: Dictionary

Dicionário opcional para configuração adicional:

  • CombineType : Especifica como os pixels da imagem de origem se misturam com os da imagem de destino. O padrão é Enum.ImageCombineType.AlphaBlend .
  • SamplingMode : Especifica o método de amostragem (por exemplo, Default para bilinear ou Pixelated para o vizinho mais próximo). O padrão é Enum.ResamplerMode.Default .
  • PivotPoint : Especifica o ponto de pivô dentro da imagem de origem para escalonamento e rotação. O padrão é o centro da imagem de origem (ou seja, Image.Size / 2).
Valor Padrão: ""

Devolução

()

Amostras de código

The following code draws a rotated and scaled image onto another.

EditableImage:DrawImageTransformed()

local AssetService = game:GetService("AssetService")
-- Example of drawing a rotated and scaled image onto another EditableImage
local srcImage = AssetService:CreateEditableImage({ Size = Vector2.new(256, 256) })
local dstImage = AssetService:CreateEditableImage({ Size = Vector2.new(512, 512) })
-- Drawing with a rotation of 45 degrees, scaling by 2x, and placing at (100, 100)
dstImage:DrawImageTransformed(
Vector2.new(100, 100), -- Position
Vector2.new(2, 2), -- Scale
45, -- Rotation (degrees)
srcImage, -- Source image
{
CombineType = Enum.ImageCombineType.AlphaBlend, -- Optional, default is AlphaBlend
SamplingMode = Enum.ResamplerMode.Default, -- Optional, default is Default
PivotPoint = srcImage.Size / 2, -- Optional, default is center of the source image
}
)

O seguinte código mostra como recortar uma imagem pode ser feito usando o método EditableImage:DrawImageTransformed().

EditableImage:DrawImageTransformed() - Crop - Português

local AssetService = game:GetService("AssetService")
-- Imagem de origem
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Área de corte definida por deslocamento e tamanho
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Imagem de destino com tamanho da área de colheita
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Posição (canto superior esquerdo)
local position = Vector2.new(0, 0)
-- Fatores de escala (sem escalonamento)
local scale = Vector2.new(1, 1)
-- Ângulo de rotação (sem rotação)
local rotation = 0
-- Desenhe a imagem de origem na imagem de destino com pivô ajustado para cortar a imagem
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Defina o ponto de pivô para cropOffset para começar a desenhar a partir de lá
})

DrawLine

()

Desenha uma linha anti-aliada de um pixel na EditableImage entre os dois pontos fornecidos.

Parâmetros

Ponto de início da linha.

Valor Padrão: ""

Ponto final da linha.

Valor Padrão: ""
color: Color3

Cor da linha.

Valor Padrão: ""
transparency: number

Transparência da linha.

Valor Padrão: ""

Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.

Valor Padrão: ""

Devolução

()

DrawRectangle

()

Desenha um retângulo no EditableImage da largura dada na posição superior esquerda dada.

Parâmetros

position: Vector2

Posição do topo esquerdo do retângulo. Ao contrário de outros métodos de desenho, isso não pode estar fora dos limites da tela do EditableImage .

Valor Padrão: ""
size: Vector2

Tamanho do retângulo para desenhar, em pixels.

Valor Padrão: ""
color: Color3

Cor do retângulo.

Valor Padrão: ""
transparency: number

Transparência do retângulo.

Valor Padrão: ""

Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.

Valor Padrão: ""

Devolução

()

ReadPixelsBuffer

Escrever Parallel

Lê uma região retangular de pixels de um EditableImage e retorna-a como um buffer.Cada número no buffer é um único byte, com pixels armazenados em uma sequência de quatro bytes (vermelho, verde, azul e alfa).

Observe que este método usa alfa em vez de transparência, ao contrário dos métodos de desenho EditableImage.

Parâmetros

position: Vector2

Canto superior esquerdo da região retangular de pixels para ler.

Valor Padrão: ""
size: Vector2

Tamanho da região retangular de pixels para ler.

Valor Padrão: ""

Devolução

Buffer onde cada pixel é representado por quatro bytes (vermelho, verde, azul e alfa, respectivamente).O comprimento do buffer pode ser calculado como Size.X * Size.Y * 4 bytes.

Amostras de código

The following code reads two pixels from a EditableImage and creates a part with the average color between them.

EditableImage:ReadPixelsBuffer()

local AssetService = game:GetService("AssetService")
local options = { Size = Vector2.new(32, 32) }
local editableImage = AssetService:CreateEditableImage(options)
local pixelsBuffer = editableImage:ReadPixelsBuffer(Vector2.zero, Vector2.new(2, 1))
local color1 =
Color3.fromRGB(buffer.readu8(pixelsBuffer, 0), buffer.readu8(pixelsBuffer, 1), buffer.readu8(pixelsBuffer, 2))
local transparency1 = (255 - buffer.readu8(pixelsBuffer, 3)) / 255
local color2 =
Color3.fromRGB(buffer.readu8(pixelsBuffer, 4), buffer.readu8(pixelsBuffer, 5), buffer.readu8(pixelsBuffer, 6))
local transparency2 = (255 - buffer.readu8(pixelsBuffer, 7)) / 255
local averageColor = color1:Lerp(color2, 0.5)
local averageTransparency = (transparency1 + transparency2) / 2
local part = Instance.new("Part")
part.Color = averageColor
part.Transparency = averageTransparency
part.Parent = workspace

WritePixelsBuffer

()

Escreve uma região retangular de pixels para um EditableImage a partir de um buffer.Cada número no buffer é um único byte, com pixels armazenados em uma sequência de quatro bytes (vermelho, verde, azul e alfa).

Observe que este método usa alfa em vez de transparência, ao contrário dos métodos de desenho EditableImage.

Parâmetros

position: Vector2

Canto superior esquerdo da região retangular para desenhar os pixels.

Valor Padrão: ""
size: Vector2

Tamanho da região retangular de pixels para escrever.

Valor Padrão: ""
buffer: buffer

Um buffer onde cada pixel é representado por quatro bytes (vermelho, verde, azul e alfa, respectivamente).O comprimento do buffer deve ser Size.X * Size.Y * 4 bytes.

Valor Padrão: ""

Devolução

()

Amostras de código

The following code reads the pixels of a EditableImage and writes back the inverted color values of those pixels.

EditableImage:WritePixelsBuffer()

local AssetService = game:GetService("AssetService")
local options = { Size = Vector2.new(32, 32) }
local editableImage = AssetService:CreateEditableImage(options)
local pixelsBuffer = editableImage:ReadPixelsBuffer(Vector2.zero, editableImage.Size)
for i = 1, editableImage.Size.X * editableImage.Size.Y do
local pixelIndex = (i - 1) * 4
buffer.writeu8(pixelsBuffer, pixelIndex, 255 - buffer.readu8(pixelsBuffer, pixelIndex))
buffer.writeu8(pixelsBuffer, pixelIndex + 1, 255 - buffer.readu8(pixelsBuffer, pixelIndex + 1))
buffer.writeu8(pixelsBuffer, pixelIndex + 2, 255 - buffer.readu8(pixelsBuffer, pixelIndex + 2))
-- Set alpha to 255 to make all pixels fully opaque.
buffer.writeu8(pixelsBuffer, pixelIndex + 3, 255)
end
editableImage:WritePixelsBuffer(Vector2.zero, editableImage.Size, pixelsBuffer)

Eventos