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 pozwala na tworzenie i manipulowanie obrazami podczas uruchamiania.
Aby utworzyć pustą EditableImage, użyj AssetService:CreateEditableImage(). Aby utworzyć EditableImage z istniejącego obrazu, użyj AssetService:CreateEditableImageAsync().
EditableImage można używać w dowolnej właściwości Content, która przyjmuje obraz, takiej jak ImageLabel.ImageContent lub MeshPart.TextureContent.Wykonuje się to poprzez ustawienie właściwości zawartości na Content.fromObject(editableImage) .
System koordynatów EditableImage jest względny do lewej górnej części obrazu:
- Góra lewo: (0, 0)
- Dół prawo: (Size.X - 1, Size.Y - 1)
Gdy używasz AssetService:PromptCreateAssetAsync() do opublikowania obiektu, który ma właściwość Content, która odnosi się do EditableImage, edytowane obraz jest publikowany jako obraz, a właściwość jest ustawiona na nową identyfikator właściwości.
Ograniczenia aktualizacji
Tylko jeden EditableImage może zostać zaktualizowany na stronie wyświetlania na każdą ramę.Na przykład, jeśli aktualizujesz trzy obiekty EditableImage, które są obecnie wyświetlane, zajmie to trzy ramy, aby wszystkie zostały zaktualizowane.
Włączanie Edytowalnego Obrazu do Opublikowanych Doświadczeń
Ze względów bezpieczeństwa używanie EditableImage nie powoduje błędu domyślnie dla opublikowanych doświadczeń.Aby włączyć korzystanie z EditableImage, musisz mieć 13+ lat zweryfikowane i weryfikacja tożsamości.Po weryfikacji otwórz Studio .Wybierz Plik > Ustawienia gry > Bezpieczeństwo i włącz przełącznik Umożliwij API siatki i obrazu .Pamiętaj o przejrzeniu warunków użytkowania przed włączeniem przełącznika.
Uprawnienia
Aby zapobiec nadużyciu, AssetService:CreateEditableImageAsync() pozwala tylko na ładowanie i edytowanie zasobów obrazowych:
- Należą one do twórcy doświadczenia (jeśli doświadczenie należy do osoby fizycznej).
- Należące do grupy (jeśli doświadczenie należy do grupa).
- Należą one do użytkownika Studio zalogowanego (jeśli plik miejsca nie został jeszcze zapisany lub opublikowany w Roblox).
APIs rzucają błąd, jeśli są używane do ładowania zasobu, który nie spełnia kryteriów powyżej.
Podsumowanie
Metody
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Rysuje okrąg w określonym punkcie.
Rysuje kolejne EditableImage w tej EditableImage pozycji na podanych pozycji.
Projektuje kolejne EditableImage w kolejną EditableMesh i przechowuje wynik na tej EditableImage .
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Rysuje obraz w tym EditableImage z transformacjami, w tym skalowaniem i obrotem, umieszczając go na określonej pozycji.
Rysuje linię między dwoma podanymi punktami.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Rysuje prostokąt o podanych rozmiarach w podanych lewych górnych pozycji.
Czyta prostokątny region pikeli w pamięć buforową.
Pisze prostokątny region pikseli do obrazu.
Właściwości
Size
Rozmiar EditableImage w pikselach.Maksymalny rozmiar to 1024×1024.An EditableImage nie może zostać zmieniony rozmiar; ta właściwość jest wyłącznie odczytywana.Aby zmienić rozmiar lub obrócić obraz, utwórz nowy EditableImage i użyj DrawImageTransformed(), aby przesłać zawartość; następnie wezwij Destroy().
Metody
Destroy
Niszczy zawartość obrazu, natychmiast odzyskując używaną pamięć.
Zwroty
DrawCircle
Rysuje okrąg na określonym punkcie na EditableImage.Jeśli okrąg jest półprzezroczysty, zostanie połączony z pikselami za nim za pomocą blendowania źródła.
Parametry
Centrum kręgu w stosunku do górnego lewego kąta EditableImage . Pozwolone są pozycje poza granicami płótna.
Promień okręgu w pikselach.
Kolor okręgu.
Przezroczystość kręgu z 0 w pełni niedostępnym i 1 w pełni przejrzystym.
W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.
Zwroty
DrawImage
Rysuje kolejne EditableImage w tej EditableImage pozycji na podanych pozycji.Pozycje poza granicami płótna są dozwolone, tak że tylko część nowego obrazu jest rysowana.
Parametry
Pozycja, w której najlewejszy kąt dodanego obrazu zostanie narysowany.
The EditableImage to rysować w tym EditableImage.
Jak piksele obrazu źródłowego powinny być miksowane z pikselami dodanego obrazu.
Zwroty
DrawImageProjected
Rozpoczyna kolejne EditableImage w projekcie EditableMesh i przechowuje wynik na tym EditableImage za pomocą określonej konfiguracji projekcji i pędzla.
Parametry
The EditableMesh używany do projektowania.
Słownik konfiguracji projekcji, w tym następujące pary klucz-wartość:
Słownik konfiguracji pędzla, w tym następujące pary klucz-wartość:
- AlphaBlendType ( Enum.ImageAlphaType ) które określa, w jaki sposób ta projekcja połączy wartości alfa.
- ColorBlendType ( Enum.ImageCombineType ) które określa, w jaki sposób ta projekcja połączy wartości kolorów.
- Decal ( EditableImage ) jako obraz używany do projekcji.
- FadeAngle (number) jako kąt w stopniach, aby krawędzie projekcji wyłączone.
- BlendIntensity (number) jako wartość pomiędzy 0 i 1, która kontroluje, ile projekcji zostanie zmiksowanych w wynikowym obrazie.
Zwroty
DrawImageTransformed
Ta metoda pozwala ci narysować EditableImage w tym EditableImage z zastosowanymi transformacjami, takimi jak skalowanie i obrót.Parametr pozycji określa, gdzie punkt obrotowy obrazu źródłowego zostanie umieszczony na tym obrazie po przetworzeniu.Pozycje poza granicami płótna są dozwolone, tak że tylko część nowego obrazu jest rysowana.
Parametry
Pozycja w pikselach, na której punkt obrotowy obrazu źródłowego zostanie umieszczony na tym obrazie.
Skalowanie czynników dla obrazu źródłowego wzdłuż osi X i Y.
Kąt obrotu w stopniach, zastosowany wokół punktu obrotu obrazu źródłowego.
Źródło EditableImage do wyciągnięcia do tej obrazu.
Opcjonalny słownik do dodatkowej konfiguracji:
- CombineType : Określa, w jaki sposób piksele obrazu źródłowego łączą się z tymi z obrazu docelowego. Domyślnie jest to Enum.ImageCombineType.AlphaBlend .
- SamplingMode : Określa metodę próbowania (np. Default dla binomialnego lub Pixelated dla najbliższego sąsiada). Domyślnie jest Enum.ResamplerMode.Default .
- PivotPoint : Określa punkt obrotowy w obrazie źródłowym do skalowania i obrotu. Domyślnie jest to środek obrazu źródłowego (tj. Image.Size / 2 ).
Zwroty
Przykłady kodu
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
Rysuje linię antyalienacyjną na EditableImage.
Parametry
Punkt początkowy linii.
Koniec linii.
Kolor linii.
Przezroczystość linii.
W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.
Zwroty
DrawRectangle
Rysuje prostokąt na EditableImage danej wielkości w danej lewej górnej pozycji.
Parametry
Pozycja górnego lewego krawędzi prostokąta. W przeciwieństwie do innych metod rysowania nie może być poza granicami płótna EditableImage .
Wielkość prostokątu do narysowania, w pikselach.
Kolor prostokąta.
Przezroczystość prostokąta.
W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.
Zwroty
ReadPixelsBuffer
Czyta prostokątny region pikseli z EditableImage i zwraca go jako bufor.Każda liczba w buforze to pojedynczy bit, z piklami przechowywanymi w sekwencji czterech bitów (czerwony, zielony, niebieski i alfa).
Zauważ, że ta metoda używa alfa zamiast przejrzystości, w przeciwieństwie do metod rysowania EditableImage.
Parametry
Górny lewy róg regionu kwadratowych pikseli do przeczytane.
Wielkość regionu prostokątnych pikseli do przeczytane.
Zwroty
Pamięć, w której każde piksel jest reprezentowane przez cztery bajty (odpowiednio czerwony, zielony, niebieski i alfa).Długość bufora można obliczyć jako Size.X * Size.Y * 4 bajtów.
Przykłady kodu
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
Pisze prostokątny region pikseli do EditableImage z bufora.Każda liczba w buforze to pojedynczy bit, z piklami przechowywanymi w sekwencji czterech bitów (czerwony, zielony, niebieski i alfa).
Zauważ, że ta metoda używa alfa zamiast przejrzystości, w przeciwieństwie do metod rysowania EditableImage.
Parametry
Górny lewy róg regionu prostokątnego, aby narysować piksele.
Wielkość regionu prostokątnych pikseli do napisania.
Pamięć buforowa, w której każdy piksel jest reprezentowany przez cztery bajty (odpowiednio czerwony, zielony, niebieski i alfa).Długość bufora powinna wynosić Size.X * Size.Y * 4 bajtów.
Zwroty
Przykłady kodu
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)