EditableImage
*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.
EditableImage umożliwia utworzenie i manipulację obrazami podczas uruchomienia.
Aby utworzyć pusty EditableImage , użyj AssetService:CreateEditableImage() . Aby utworzyć EditableImage z istniejącego obrazu, użyj 1> Class.AssetService:CreateEditableImageAsync()1> .
Class.EditableImage może być używany w dowolnej Content właściwości, która wziąłby zdjęcie, takie jak ImageLabel.ImageContent lub 0> Class.MeshPart.TextureContent0>. To jest zrobione poprzez ustawienie właściwości treści na 3> Datatype.Content.
System koordynat EditableImage jest względny do góry lewej strony obrazu:
- Góra lewo: (0, 0)
- Narożnik lewy: (Size.X - 1, Size.Y - 1)
Gdy używasz AssetService:PromptCreateAssetAsync() , aby opublikować obiekt, który ma Content właściwość, która odnosi się do EditableImage, obiekt edytowany jest opublikowany jako obraz i właściwość ustawiona na nowy identyfikator dostępu.
Włącz EditableImage dla opublikowanych doświadczeń
Ze względu na cele bezpieczeństwa używanie EditableImage dla opublikowanych doświadczeń domyślnie dla publikowanych doświadczeń. Aby włączyć używanie EditableImage , musisz mieć wiek 13+ i być zweryfikowanym ID
Permisje
Aby zapobiec nadużyciom, AssetService:CreateEditableImageAsync() pozwala tylko na ładowanie i edytowanie zasobów obrazu:
- To należy do twórcy doświadczenia (jeśli doświadczenie należy do osoby).
- To należy do grupy (jeśli doświadczenie należy do grupa).
- To należy do użytkownika Studio zalogowanego (jeśli plik miejsca nie został jeszcze zapisany lub opublikowany na Roblox).
Interfejsy rzucają błąd, jeśli zostaną użyte do ładowania zasobu, który nie spełnia wymagań powyżej.
Podsumowanie
Metody
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
Rysuje krąg na określonym punkcie.
Rysuje kolejny EditableImage w tym EditableImage w danej pozycji.
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : Object,options : Dictionary?):void
Rysuje obraz w ten EditableImage z transformacjami, w tym skalowaniem i obrotem, umieszczając go w określonej pozycji.
Rysuje linię między podanymi dwoma punktami.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
Rysuje prostokąt o podanym rozmiarze w podanym lewym górnym pozycji.
Czyta Rectangular Region of Pixels w pufferze.
Pisze Rectangular Region of Pixels w obrazie.
Właściwości
Size
Rozmiar EditableImage w pikselach. Maksymalny rozmiar wynosi 1024×1024. EditableImage nie może być skalowany; ta właściwość jest tylko czytelna. Aby
Metody
Destroy
Niszczy zawartość obrazu, natychmiastowo odsysając używany pamięci.
Zwroty
DrawCircle
Rysuje krąg na określonym punkcie na EditableImage. Jeśli krąg jest półprzezroczysty, będzie miksowany z pikselami za nim używając źródła do miksowania.
Parametry
Centrum kруgu, w stosunku do górnego lewego kąta EditableImage . Pozycje poza obszarem płótna są dozwolone.
Okrąg wokół których w pikselach.
Kolor kręgu.
Przezroczystość kręgu z 0 będącego całkowicie niewidocznym i 1 będącego całkowicie przejrzystym.
Jak piksely obrazu źródłowego są mieszane z pikselami dodanego obrazu.
Zwroty
DrawImage
Rysuje kolejny EditableImage w tym EditableImage na danej pozycji. Pozycje poza zakresem płótna są dozwolone, tak aby tylko część nowego obrazu została rysowana.
Parametry
Pozycja, w której lewy górny róg dodanego obrazu zostanie rysowany.
Class.EditableImage do rysowania w ten EditableImage .
Jak piksely obrazu źródłowego powinny być mieszane z pikselami dodanego obrazu.
Zwroty
DrawImageTransformed
Ten metodę umożliwia rysowanie EditableImage w tym EditableImage z zastosowanymi transformacjami, takimi jak skalowanie i obrót. Parametr pozycji określa, gdzie punkt pivot źródła obrazu zostanie postawiony na tym obrazie po transformacjach. Pozycje poza zakresem kanwy są dozwolone, aby tylko część nowego obrazu została rysowana
Parametry
Pozycja w pikselach, gdzie punkt pivot źródła będzie umieszczony na tym obrazie.
Skalowanie czynników dla obrazu źródła wzdłuż osi X i Y.
Kąt obrotowy w stopniach, zastosowany wokół punktu obrotowego źródła obrazu.
Źródło EditableImage do tego obrazu.
Opcjonalny słownik dla dodatkowej konfiguracji:
- CombineType : Określa, jak pikselki obrazu źródłowego mieszają się z tymi z celu. Domyślnie jest Enum.ImageCombineType.AlphaBlend .
- SamplingMode : Określa metodę próbkowania (na przykład Default dla barycznej lub Pixelated dla najbliższego sąsiada). Domyślny jest 0> enum.resamplerMode.DEFAULT0> .
- PivotPoint : Określa punkt pivot w obrazie źródłowym dla skalowania i obrotu. Domyślnie jest to centrum obrazu źródłowego (tj. Image.Size / 2).
Zwroty
Przykłady kodu
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
}
)
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
Rysuje anty-aliased line on the EditableImage jeden pixel thick between the two provided points.
Parametry
Początek linii.
Koniec punktu linii.
Kolor linii.
Przezroczystość linii.
Jak piksely obrazu źródłowego są mieszane z pikselami dodanego obrazu.
Zwroty
DrawRectangle
Rysuje prostopadło na EditableImage dostępnym rozmiarem w danej pozycji góry lewej.
Parametry
Pozycja góry lewej prostokąta. W przeciwieństwie do innych metod rysowania nie może być poza zakresem płótna EditableImage .
Rozmiar prostokątu do rysowania, w pikselach.
Kolor prostokątu.
Przezroczystość prostokąta.
Jak piksely obrazu źródłowego są mieszane z pikselami dodanego obrazu.
Zwroty
ReadPixelsBuffer
Wersja ReadPixels(), która zwraca bufer zamiast tabeli. Każdy numer w buferze jest jednym bajtem, podczas gdy każdy numer w tabeli to 4 bajty, co czyni ReadPixelsBuffer() bardziej wydajnym niż Class.EditableImage
Uwaga, że ten metod używa alfa, a nie przejrzystości, w przeciwieństwie do metod rysowania EditableImage.
Parametry
Prawy górny roóg regionu kwadratów do przeczytane.
Rozmiar prostopadłego obszaru pikseli do przeczytane.
Zwroty
Pokój, w którym każdy piksel jest reprezentowany przez cztery bajty (czerwony, zielony, niebieski i alpha odpowiednio). Długość pokoju można obliczyć jako Size.X * Size.Y * 4 bajty.
Przykłady kodu
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 = 1 - buffer.readu8(pixelsBuffer, 3)
local color2 = Color3.fromRGB(buffer.readu8(pixelsBuffer, 4), buffer.readu8(pixelsBuffer, 5), buffer.readu8(pixelsBuffer, 6))
local transparency2 = 1 - buffer.readu8(pixelsBuffer, 7)
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
Wersja WritePixels() , która wziąłaby bufer zamiast tabeli. Każdy numer w buferze jest jednym bajtem, podczas gdy każdy numer w tabeli to 4 bajty, co czyni WritePixelsBuffer() bardziej wydajnym niż Class.Editable
Uwaga, że ten metod używa alfa, a nie przejrzystości, w przeciwieństwie do metod rysowania EditableImage.
Parametry
Prawy górny roóg regionu prostopadłego, aby wciągnąć pikseli.
Rozmiar prostopadłego obszaru pikseli do zapisu.
Puffer, w którym każdy piksel jest reprezentowany przez cztery bajty (czerwony, zielony, niebieski i alpha odpowiednio). Długość pufferu powinna wynosić Size.X * Size.Y * 4 bajtów.
Zwroty
Przykłady kodu
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))
end
editableImage:WritePixelsBuffer(Vector2.zero, editableImage.Size, pixelsBuffer)