EditableImage
*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.
EditableImage consente la creazione e la manipolazione delle immagini durante l'esecuzione.
Per creare un vuoto EditableImage , usa AssetService:CreateEditableImage() . Per creare un EditableImage da un'immagine esistente, usa AssetService:CreateEditableImageAsync() .
EditableImage può essere utilizzato in qualsiasi proprietà Content che prende un'immagine, come ImageLabel.ImageContent o MeshPart.TextureContent .Questo viene fatto impostando la proprietà del contenuto a Content.fromObject(editableImage) .
Il sistema di coordinate EditableImage è relativo all'angolo superiore sinistro dell'immagine:
- A sinistra in alto: (0, 0)
- In basso a destra: (Size.X - 1, Size.Y - 1)
Quando usi AssetService:PromptCreateAssetAsync() per pubblicare un oggetto che ha una proprietà Content che fa riferimento a un EditableImage , l'immagine modificabile viene pubblicata come immagine e la proprietà viene impostata su un nuovo ID risorsa.
Aggiorna limitazioni
Solo un singolo EditableImage può essere aggiornato per frame sul lato display.Ad esempio, se aggiorni tre oggetti EditableImage in mostra attualmente, ci vorranno tre frame per aggiornarli tutti.
Abilitazione di EditableImage per esperienze pubblicate
Per scopi di sicurezza, l'uso di EditableImage fallisce per impostazione predefinita per le esperienze pubblicate.Per abilitare l'uso di EditableImage , devi essere verificato l'età 13+ e l'ID verificato.Dopo essere stato verificato, apri Studio .Seleziona File > Impostazioni di gioco > Sicurezza e abilita il pulsante Consenti API mesh e immagine attivare/disattivare.Ricorda di rivedere i termini d'uso prima di abilitare l'interruttore.
Permessi
Per prevenire l'uso improprio, AssetService:CreateEditableImageAsync() ti consente di caricare e modificare solo risorse di immagine:
- Che sono di proprietà del creatore dell'esperienza (se l'esperienza è di proprietà di un individuo).
- Che sono di proprietà di un gruppo (se l'esperienza è di proprietà del Gruppo).
- Che sono di proprietà dell'utente Studio registrato (se il file del luogo non è stato ancora salvato o pubblicato su Roblox).
Le API lanciano un errore se vengono utilizzate per caricare una risorsa che non soddisfa i criteri sopra riportati.
Sommario
Proprietà
Dimensione del EditableImage in pixel.
Metodi
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Disegna un cerchio al punto specificato.
Disegna un altro EditableImage in questa EditableImage alla posizione data.
Proietta un altro EditableImage in un EditableMesh e memorizza il risultato su questo EditableImage .
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Disegna un'immagine in questo EditableImage con trasformazioni che includono ridimensionamento e rotazione, posizionandola nella posizione specificata.
Disegna una linea tra due punti forniti.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Disegna un rettangolo della dimensione data nella posizione superiore sinistra data.
Legge una regione rettangolare di pixel in un buffer.
Scrive una regione rettangolare di pixel nell'immagine.
Proprietà
Size
Dimensione del EditableImage in pixel.La dimensione massima è 1024×1024.Un EditableImage non può essere ridimensionato; questa proprietà è solo letta.Per ridimensionare o ritagliare un'immagine, crea un nuovo EditableImage e usa DrawImageTransformed() per trasferire i contenuti; quindi chiama Destroy() .
Metodi
Destroy
Distrugge i contenuti dell'immagine, recuperando immediatamente la memoria utilizzata.
Restituzioni
DrawCircle
Disegna un cerchio al punto specificato sul EditableImage .Se il cerchio è semi-trasparente, verrà mescolato con i pixel dietro di esso usando la sovrapposizione della fonte.
Parametri
Centro del cerchio, rispetto all'angolo in alto a sinistra del EditableImage . Le posizioni al di fuori dei confini della tela sono consentite.
Raggio del cerchio in pixel.
Colore del cerchio.
Trasparenza del cerchio con 0 completamente opaco e 1 completamente trasparente.
Come i pixel dell'immagine di origine vengono fusi con i pixel dell'immagine aggiunta.
Restituzioni
DrawImage
Disegna un altro EditableImage in questa EditableImage alla posizione data.Le posizioni al di fuori dei confini della tela sono consentite in modo che solo una parte della nuova immagine venga disegnata.
Parametri
Posizione in cui verrà disegnato l'angolo superiore sinistro dell'immagine aggiunta.
Il EditableImage per disegnare in questo EditableImage .
Come i pixel dell'immagine di origine dovrebbero essere mescolati con i pixel dell'immagine aggiunta.
Restituzioni
DrawImageProjected
Proietta un altro EditableImage in un EditableMesh e memorizza il risultato su questo EditableImage utilizzando la configurazione di proiezione e pennello specificata.
Parametri
Il EditableMesh utilizzato per proiettarsi.
Dizionario di configurazione delle proiezioni che include i seguenti coppie chiave-valore:
Dizionario di configurazione del pennello che include i seguenti coppie di chiave-valore:
- AlphaBlendType ( Enum.ImageAlphaType ) che determina come questa proiezione mescolerà i valori alfa.
- ColorBlendType ( Enum.ImageCombineType ) che determina come questa proiezione mescolerà i valori di colore.
- Decal ( EditableImage ) come immagine utilizzata per la proiezione.
- FadeAngle (number) come l'angolo in gradi per i bordi di proiezione per off.
- BlendIntensity (number) come valore tra 0 e 1 che controlla quanto della proiezione viene mescolato nell'immagine risultante.
Restituzioni
DrawImageTransformed
Questo metodo ti consente di disegnare un EditableImage in questo EditableImage con trasformazioni applicate, come ridimensionamento e rotazione.Il parametro posizione specifica dove verrà posizionato il punto di rotazione dell'immagine sorgente su questa immagine dopo le trasformazioni.Le posizioni al di fuori dei confini della tela sono consentite in modo che solo una parte della nuova immagine venga disegnata.
Parametri
Posizione in pixel in cui il punto di rotazione dell'immagine sorgente verrà posizionato su questa immagine.
Fattori di ridimensionamento per l'immagine di origine lungo gli assi X e Y.
L'angolo di rotazione in gradi, applicato attorno al punto di rotazione dell'immagine sorgente.
La fonte EditableImage da disegnare in questa immagine.
Dizionario opzionale per una configurazione aggiuntiva:
- CombineType : Specifica come i pixel dell'immagine di origine si mescolino con quelli della destinazione. Il predefinito è Enum.ImageCombineType.AlphaBlend .
- SamplingMode : Specifica il metodo di campionamento (ad esempio Default per bilineare o Pixelated per il vicino più vicino). Il predefinito è Enum.ResamplerMode.Default .
- PivotPoint : Specifica il punto di rotazione all'interno dell'immagine sorgente per la ridimensionamento e la rotazione. Il predefinito è il centro dell'immagine sorgente (cioè Image.Size / 2 ).
Restituzioni
Campioni di codice
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
Disegna una linea anti-aliasata su EditableImage di un pixel tra i due punti forniti.
Parametri
Punto di partenza della linea.
Punto finale della linea.
Colore della linea.
Trasparenza della linea.
Come i pixel dell'immagine di origine vengono fusi con i pixel dell'immagine aggiunta.
Restituzioni
DrawRectangle
Disegna un rettangolo sul EditableImage della dimensione data nella posizione superiore sinistra indicata.
Parametri
Posizione dell'alto a sinistra del rettangolo. A differenza di altri metodi di disegno, questo non può essere al di fuori dei confini della tela del EditableImage .
Dimensione del rettangolo da disegnare, in pixel.
Colore del rettangolo.
Trasparenza del rettangolo.
Come i pixel dell'immagine di origine vengono fusi con i pixel dell'immagine aggiunta.
Restituzioni
ReadPixelsBuffer
Legge una regione rettangolare di pixel da un EditableImage e la restituisce come buffer.Ogni numero nel buffer è un singolo byte, con pixel memorizzati in una sequenza di quattro byte (rosso, verde, blu e alfa).
Nota che questo metodo utilizza l'alfa invece di trasparenza, a differenza dei metodi di disegno EditableImage .
Parametri
Angolo superiore sinistro della regione rettangolare di pixel da leggere.
Dimensione della regione rettangolare di pixel da leggere.
Restituzioni
buffer in cui ogni pixel è rappresentato da quattro bytes (rosso, verde, blu e alfa rispettivamente).La lunghezza del buffer può essere calcolata come Size.X * Size.Y * 4 bytes.
Campioni di codice
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
Scrive una regione rettangolare di pixel in un EditableImage da un buffer.Ogni numero nel buffer è un singolo byte, con pixel memorizzati in una sequenza di quattro byte (rosso, verde, blu e alfa).
Nota che questo metodo utilizza l'alfa invece di trasparenza, a differenza dei metodi di disegno EditableImage .
Parametri
Angolo superiore sinistro della regione rettangolare per disegnare i pixel.
Dimensione della regione rettangolare di pixel da scrivere.
Un buffer in cui ogni pixel è rappresentato da quattro bytes (rosso, verde, blu e alfa rispettivamente).La lunghezza del buffer dovrebbe essere Size.X * Size.Y * 4 bytes.
Restituzioni
Campioni di codice
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)