EditableImage

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible

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é

Propriétés

Méthodes

Propriétés

Lecture uniquement
Non répliqué
Lecture parallèle

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

center: Vector2

Centre du cercle, par rapport au coin supérieur gauche du EditableImage . Les positions en dehors des limites de la toile sont autorisées.

Valeur par défaut : ""
radius: number

Rayon du cercle en pixels.

Valeur par défaut : ""
color: Color3

Couleur du cercle.

Valeur par défaut : ""
transparency: number

Transparence du cercle avec 0 étant entièrement opaque et 1 étant entièrement transparent.

Valeur par défaut : ""

Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.

Valeur par défaut : ""

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: Vector2

Position à laquelle le coin supérieur gauche de l'image ajoutée sera dessiné.

Valeur par défaut : ""

Le EditableImage pour dessiner dans ce EditableImage.

Valeur par défaut : ""

Comment les pixels de l'image source doivent être mélangés avec les pixels de l'image ajoutée.

Valeur par défaut : ""

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.

Valeur par défaut : ""
projection: Dictionary

Dictionnaire de configuration de projection comprenant les paires clé-valeur suivantes :

  • Direction ( Vector3 ) où le projecteur est face.
  • Position ( Vector3 ) en tant que position dans l'espace local par rapport au maillage.
  • Size ( Vector3 ) comme la taille du projecteur.
  • Up ( Vector3 ) en tant que vecteur supérieur du projecteur dans l'espace local par rapport au maillage.
Valeur par défaut : ""
brushConfig: Dictionary

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.
Valeur par défaut : ""

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: Vector2

Position en pixels où le point de pivot de l'image source sera placé sur cette image.

Valeur par défaut : ""
scale: Vector2

Facteurs d'échelle pour l'image source le long des axes X et Y.

Valeur par défaut : ""
rotation: number

L'angle de rotation en degrés, appliqué autour du point de pivot de l'image source.

Valeur par défaut : ""

La source EditableImage à être dessinée dans cette image.

Valeur par défaut : ""
options: Dictionary

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 ).
Valeur par défaut : ""

Retours

()

Échantillons de code

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

()

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.

Valeur par défaut : ""

Point final de la ligne.

Valeur par défaut : ""
color: Color3

Couleur de la ligne.

Valeur par défaut : ""
transparency: number

Transparence de la ligne.

Valeur par défaut : ""

Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.

Valeur par défaut : ""

Retours

()

DrawRectangle

()

Dessine un rectangle sur le EditableImage de la taille donnée à la position supérieure gauche donnée.

Paramètres

position: Vector2

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 .

Valeur par défaut : ""
size: Vector2

Taille du rectangle à dessiner, en pixels.

Valeur par défaut : ""
color: Color3

Couleur du rectangle.

Valeur par défaut : ""
transparency: number

Transparence du rectangle.

Valeur par défaut : ""

Comment les pixels de l'image source sont mélangés avec les pixels de l'image ajoutée.

Valeur par défaut : ""

Retours

()

ReadPixelsBuffer

Écrire en parallèle

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

position: Vector2

Coin supérieur gauche de la région rectangulaire de pixels à lu.

Valeur par défaut : ""
size: Vector2

Taille de la région rectangulaire de pixels à lu.

Valeur par défaut : ""

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.

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

()

É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

position: Vector2

Coin supérieur gauche de la région rectangulaire pour dessiner les pixels.

Valeur par défaut : ""
size: Vector2

Taille de la région rectangulaire de pixels à écrire.

Valeur par défaut : ""
buffer: buffer

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.

Valeur par défaut : ""

Retours

()

Échantillons de code

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)

Évènements