EditableImage
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
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
Métodos
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Desenha um círculo no ponto especificado.
Desenha outro EditableImage neste EditableImage na posição dada.
Projeta outro EditableImage em um EditableMesh e armazena o resultado neste EditableImage .
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Desenha uma imagem neste EditableImage com transformações, incluindo escalonamento e rotação, colocando-a na posição especificada.
Desenha uma linha entre dois pontos fornecidos.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Desenha um retângulo do tamanho dado na posição superior esquerda dada.
Lê uma região retangular de pixels em um buffer.
Escreve uma região retangular de pixels na imagem.
Propriedades
Size
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
Centro do círculo, em relação ao canto superior esquerdo do EditableImage. Posições fora dos limites da tela são permitidas.
Raio do círculo em pixels.
Coração do círculo.
Transparência do círculo com 0 sendo totalmente opaco e 1 sendo totalmente transparente.
Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.
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
Posição em que o canto superior esquerdo da imagem adicionada será desenhado.
O EditableImage para desenhar neste EditableImage.
Como os pixels da imagem de origem devem ser misturados com os pixels da imagem adicionada.
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.
Dicionário de configuração de projeção incluindo os seguintes pares de chave-valor:
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.
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
Posição em pixels onde o ponto de pivô da imagem de origem será colocado nesta imagem.
Fatores de escalonamento para a imagem de origem ao longo dos eixos X e Y.
O ângulo de rotação em graus, aplicado ao redor do ponto de pivô da imagem de origem.
A fonte EditableImage para ser desenhada nesta imagem.
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).
Devolução
Amostras de código
The following code draws a rotated and scaled image onto another.
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.
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.
Ponto final da linha.
Cor da linha.
Transparência da linha.
Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.
Devolução
DrawRectangle
Desenha um retângulo no EditableImage da largura dada na posição superior esquerda dada.
Parâmetros
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 .
Tamanho do retângulo para desenhar, em pixels.
Cor do retângulo.
Transparência do retângulo.
Como os pixels da imagem de origem são misturados com os pixels da imagem adicionada.
Devolução
ReadPixelsBuffer
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
Canto superior esquerdo da região retangular de pixels para ler.
Tamanho da região retangular de pixels para ler.
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.
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
Canto superior esquerdo da região retangular para desenhar os pixels.
Tamanho da região retangular de pixels para escrever.
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.
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.
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)