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 l'image modifiable pour 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 de EditableImage , vous devez être âgé de 13 ans ou plus et vérifier votre identité.Après avoir été vérifié, ouvrez Studio .Sélectionnez Fichier > Paramètres de jeu > Sécurité et activez l'option Autoriser les API de maillage et d'image .N'oubliez pas de revoir les conditions d'utilisation avant d'activer le activer/désactiver.
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.
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 off.
- 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
}
)
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
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 à lu.
Taille de la région rectangulaire de pixels à lu.
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)