EditableImage
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
EditableImage permet la création et la manipulation des images en temps d'exécution.
Pour créer un vide EditableImage, utilisez AssetService:CreateEditableImage() . Pour créer un EditableImage à partir d'une image existante, utilisez AssetService:CreateEditableImageAsync() .
EditableImage peut être utilisé dans n'importe quelle propriété Content qui prend une image, comme ImageLabel.ImageContent ou MeshPart.TextureContent .Cela se fait en définissant la propriété de contenu à Content.fromObject(editableImage) .
Le système de coordonnées EditableImage est relatif au haut gauche de l'image :
- Haut à gauche : (0, 0)
- Bas à droite : (Size.X - 1, Size.Y - 1)
Lorsque vous utilisez AssetService:PromptCreateAssetAsync() pour publier un objet qui a une propriété Content qui fait référence à un EditableImage, l'image modifiable est publiée en tant qu'image et la propriété est définie sur une nouvelle ID de ressource.
Mise à jour des limitations
Seule une seule EditableImage peut être mise à jour par cadre sur le côté d'affichage.Par exemple, si vous mettez à jour trois objets EditableImage qui sont actuellement affichés, il faudra trois cadres pour que tous soient mis à jour.
Activer les expériences publiées
Pour des raisons de sécurité, l'utilisation de EditableImage échoue par défaut pour les expériences publiées.Pour activer l'utilisation, vous devez être âgé de 13 ans ou plus et vérifier votre identité.Après avoir été vérifié, ouvrez les paramètres de jeu de Studio , sélectionnez sécurité et activez le bouton autoriser les API de maillage/image .
Permissions
Pour empêcher une utilisation malveillante, AssetService:CreateEditableImageAsync() ne vous permet de charger et d'éditer que des ressources d'image :
- Ceux qui sont possédés par le créateur de l'expérience (si l'expérience est possédée par une personne).
- Ceux qui sont possédés par un groupe (si l'expérience appartient au groupe).
- Ceux qui sont possédés par l'utilisateur de Studio connecté (si le fichier de lieu n'a pas encore été sauvegardé ou publié sur Roblox).
Les API lancent une erreur si elles sont utilisées pour charger une ressource qui ne répond pas aux critères ci-dessus.
Limites de mémoire
Les ressources modifiables sont actuellement coûteuses pour l'utilisation de la mémoire.Pour minimiser son impact sur les performances du client, EditableImage a des budgets de mémoire stricts du côté du client, bien que le serveur, Studio et les plugins fonctionnent avec une mémoire illimitée.Lier un EditableImage à plusieurs types de données liés à l'image Content (multiréférencement) peut aider à l'optimisation de la mémoire.
Résumé
Méthodes
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Dessine un cercle au point spécifié.
Entraîne un autre EditableImage à cette position EditableImage donnée.
Projette un autre EditableImage dans un EditableMesh et stocke le résultat sur ce EditableImage .
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Fait apparaître une image dans cette EditableImage avec des transformations, y compris la mise à l'échelle et la rotation, à l'emplacement spécifié.
Dessine une ligne entre deux points fournis.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Tire un rectangle de la taille donnée à la position supérieure gauche donnée.
Lit une région rectangulaire de pixels en tampon.
Écrit une région rectangulaire de pixels dans l'image.
Évènements
Propriétés
Size
Taille du EditableImage en pixels.La taille maximale est de 1024×1024.Un EditableImage ne peut pas être redimensionné ; cette propriété est lectible uniquement.Pour redimensionner ou recadrer une image, créez un nouveau EditableImage et utilisez DrawImageTransformed() pour transférer le contenu ; puis appelez Destroy() .
Méthodes
Destroy
Détruit le contenu de l'image, récupérant immédiatement la mémoire utilisée.
Retours
DrawCircle
Dessine un cercle au point spécifié sur le EditableImage.Si le cercle est semi-transparent, il sera mélangé avec les pixels derrière lui en utilisant la superposition de source.
Paramètres
Centre du cercle, par rapport au coin supérieur gauche du EditableImage . Les positions en dehors des limites de la toile sont autorisées.
Rayon du cercle en pixels.
Couleur du cercle.
Transparence du cercle avec 0 étant entièrement opaque et 1 étant entièrement transparent.
Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.
Retours
DrawImage
Entraîne un autre EditableImage à cette position EditableImage donnée.Les positions en dehors des limites de la toile sont autorisées afin que seule une partie de la nouvelle image soit dessinée.
Paramètres
Position à laquelle le coin supérieur gauche de l'image ajoutée sera dessiné.
Le EditableImage pour dessiner dans ce EditableImage.
Comment les pixels de l'image source doivent être mélangés avec les pixels de l'image ajoutée.
Retours
DrawImageProjected
Projette un autre EditableImage dans un EditableMesh et stocke le résultat sur ce EditableImage en utilisant la configuration de projection et de pinceau précisée.
Paramètres
Le EditableMesh utilisé pour se projeter.
Dictionnaire de configuration de projection comprenant les paires clé-valeur suivantes :
Dictionnaire de configuration des pinceaux incluant les paires clé-valeur suivantes :
- AlphaBlendType ( Enum.ImageAlphaType ) qui détermine comment cette projection mélangera les valeurs alpha.
- ColorBlendType ( Enum.ImageCombineType ) qui détermine comment cette projection mélangera les valeurs de couleur.
- Decal ( EditableImage ) comme image utilisée pour la projection.
- FadeAngle (number) comme l'angle en degrés pour que les bords de projection tombent.
- BlendIntensity (number) comme valeur entre 0 et 1 qui contrôle la quantité de la projection qui se mélange dans l'image résultante.
Retours
DrawImageTransformed
Cette méthode vous permet de dessiner un EditableImage dans ce EditableImage avec des transformations appliquées, telles que l'ajustement de la taille et la rotation.Le paramètre de position spécifie où le point pivot de l'image source sera placé sur cette image après les transformations.Les positions en dehors des limites de la toile sont autorisées afin que seule une partie de la nouvelle image soit dessinée.
Paramètres
Position en pixels où le point de pivot de l'image source sera placé sur cette image.
Facteurs d'échelle pour l'image source le long des axes X et Y.
L'angle de rotation en degrés, appliqué autour du point de pivot de l'image source.
La source EditableImage à être dessinée dans cette image.
Dictionnaire facultatif pour une configuration supplémentaire :
- CombineType : Spécifie comment les pixels de l'image source se mélangent avec ceux de la destination. La valeur par défaut est Enum.ImageCombineType.AlphaBlend .
- SamplingMode : Spécifie la méthode d'échantillonnage (par exemple, Default pour bilinaire ou Pixelated pour le voisin le plus proche). La valeur par défaut est Enum.ResamplerMode.Default .
- PivotPoint : Spécifie le point de pivot dans l'image source pour la mise à l'échelle et la rotation. La valeur par défaut est le centre de l'image source (i.e. Image.Size / 2 ).
Retours
Échantillons de code
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
}
)
Le code suivant montre comment recadrer une image peut être fait en utilisant la méthode EditableImage:DrawImageTransformed().
local AssetService = game:GetService("AssetService")
-- Image source
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Zone de récolte définie par décalage et taille
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Image de destination avec la taille de la zone de récolte
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Position (coin supérieur gauche)
local position = Vector2.new(0, 0)
-- Facteurs d'échelle (pas de mise à l'échelle)
local scale = Vector2.new(1, 1)
-- Angle de rotation (pas de rotation)
local rotation = 0
-- Tirer l'image source sur l'image de destination avec un pivot ajusté pour couper l'image
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Définir le point de pivot pour décaler le décalage pour commencer à dessiner là-bas
})
DrawLine
Tire une ligne anti-aliénée sur le EditableImage d'un pixel épais entre les deux points fournis.
Paramètres
Point de départ de la ligne.
Point final de la ligne.
Couleur de la ligne.
Transparence de la ligne.
Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.
Retours
DrawRectangle
Dessine un rectangle sur le EditableImage de la taille donnée à la position supérieure gauche donnée.
Paramètres
Position du haut gauche du rectangle. Contrairement à d'autres méthodes de dessin, cela ne peut pas être en dehors des limites de la toile du EditableImage .
Taille du rectangle à dessiner, en pixels.
Couleur du rectangle.
Transparence du rectangle.
Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.
Retours
ReadPixelsBuffer
Lit une région rectangulaire de pixels à partir d'un EditableImage et la renvoie en tant que tampon.Chaque nombre dans le tampon est un seul octet, avec des pixels stockés dans une séquence de quatre octets (rouge, vert, bleu et alpha).
Notez que cette méthode utilise l'alpha au lieu de la transparence, contrairement aux méthodes de dessin EditableImage .
Paramètres
Coin supérieur gauche de la région rectangulaire de pixels à lire.
Taille de la région rectangulaire de pixels à lire.
Retours
Buffre où chaque pixel est représenté par quatre octets (rouge, vert, bleu et alpha respectivement).La longueur du tampon peut être calculée comme Size.X * Size.Y * 4 octets.
Échantillons de code
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
Écrit une région rectangulaire de pixels dans un EditableImage à partir d'un tampon.Chaque nombre dans le tampon est un seul octet, avec des pixels stockés dans une séquence de quatre octets (rouge, vert, bleu et alpha).
Notez que cette méthode utilise l'alpha au lieu de la transparence, contrairement aux méthodes de dessin EditableImage .
Paramètres
Coin supérieur gauche de la région rectangulaire pour dessiner les pixels.
Taille de la région rectangulaire de pixels à écrire.
Un tampon où chaque pixel est représenté par quatre octets (rouge, vert, bleu et alpha respectivement).La longueur du tampon devrait être de Size.X * Size.Y * 4 octets.
Retours
Échantillons de code
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)