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 Imagem Editável para Experiências Publicadas

Para fins de segurança, usar EditableImage falha por padrão para experiências publicadas.Para habilitar o uso de EditableImage , você deve ter idade 13+ verificada e Identidade verificada / ID verificada.Depois de verificado, abra Studio .Selecione Arquivo > Configurações do Jogo > Segurança e ative o botão Permitir APIs de Modelo e alternar .Lembre-se de revisar os Termos de Uso antes de ativar a opção de alternar.

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.

Resumo

Propriedades

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 desligado.
  • 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
}
)

The following code shows how cropping an image can be done using the EditableImage:DrawImageTransformed() method.

EditableImage:DrawImageTransformed() - Crop

local AssetService = game:GetService("AssetService")
-- Source image
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Crop area defined by offset and size
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Destination image with size of the crop area
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Position (top-left corner)
local position = Vector2.new(0, 0)
-- Scale factors (no scaling)
local scale = Vector2.new(1, 1)
-- Rotation angle (no rotation)
local rotation = 0
-- Draw the source image onto the destination image with adjusted pivot to crop the image
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Set pivot point to cropOffset to start drawing from there
})

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