EditableImage

Pokaż przestarzałe

*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.

Brak możliwości tworzenia

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

Właściwości

Metody

Właściwości

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

center: Vector2

Centrum kręgu w stosunku do górnego lewego kąta EditableImage . Pozwolone są pozycje poza granicami płótna.

Wartość domyślna: ""
radius: number

Promień okręgu w pikselach.

Wartość domyślna: ""
color: Color3

Kolor okręgu.

Wartość domyślna: ""
transparency: number

Przezroczystość kręgu z 0 w pełni niedostępnym i 1 w pełni przejrzystym.

Wartość domyślna: ""

W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.

Wartość domyślna: ""

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

position: Vector2

Pozycja, w której najlewejszy kąt dodanego obrazu zostanie narysowany.

Wartość domyślna: ""

The EditableImage to rysować w tym EditableImage.

Wartość domyślna: ""

Jak piksele obrazu źródłowego powinny być miksowane z pikselami dodanego obrazu.

Wartość domyślna: ""

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.

Wartość domyślna: ""
projection: Dictionary

Słownik konfiguracji projekcji, w tym następujące pary klucz-wartość:

  • Direction ( Vector3 ) gdzie projektor jest skierowany.
  • Position ( Vector3 ) jako pozycja w przestrzeni lokalnej w odniesieniu do siatki.
  • Size ( Vector3 ) jako rozmiar projektora.
  • Up ( Vector3 ) jako wzrost wektorów projektora w przestrzeni lokalnej w odniesieniu do siatki.
Wartość domyślna: ""
brushConfig: Dictionary

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.
Wartość domyślna: ""

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

position: Vector2

Pozycja w pikselach, na której punkt obrotowy obrazu źródłowego zostanie umieszczony na tym obrazie.

Wartość domyślna: ""
scale: Vector2

Skalowanie czynników dla obrazu źródłowego wzdłuż osi X i Y.

Wartość domyślna: ""
rotation: number

Kąt obrotu w stopniach, zastosowany wokół punktu obrotu obrazu źródłowego.

Wartość domyślna: ""

Źródło EditableImage do wyciągnięcia do tej obrazu.

Wartość domyślna: ""
options: Dictionary

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 ).
Wartość domyślna: ""

Zwroty

()

Przykłady kodu

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

()

Rysuje linię antyalienacyjną na EditableImage.

Parametry

Punkt początkowy linii.

Wartość domyślna: ""

Koniec linii.

Wartość domyślna: ""
color: Color3

Kolor linii.

Wartość domyślna: ""
transparency: number

Przezroczystość linii.

Wartość domyślna: ""

W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.

Wartość domyślna: ""

Zwroty

()

DrawRectangle

()

Rysuje prostokąt na EditableImage danej wielkości w danej lewej górnej pozycji.

Parametry

position: Vector2

Pozycja górnego lewego krawędzi prostokąta. W przeciwieństwie do innych metod rysowania nie może być poza granicami płótna EditableImage .

Wartość domyślna: ""
size: Vector2

Wielkość prostokątu do narysowania, w pikselach.

Wartość domyślna: ""
color: Color3

Kolor prostokąta.

Wartość domyślna: ""
transparency: number

Przezroczystość prostokąta.

Wartość domyślna: ""

W jaki sposób piksele obrazu źródłowego są miksowane z pikselami dodanego obrazu.

Wartość domyślna: ""

Zwroty

()

ReadPixelsBuffer

Zapis równoległy

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

position: Vector2

Górny lewy róg regionu kwadratowych pikseli do przeczytane.

Wartość domyślna: ""
size: Vector2

Wielkość regionu prostokątnych pikseli do przeczytane.

Wartość domyślna: ""

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.

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

()

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

position: Vector2

Górny lewy róg regionu prostokątnego, aby narysować piksele.

Wartość domyślna: ""
size: Vector2

Wielkość regionu prostokątnych pikseli do napisania.

Wartość domyślna: ""
buffer: buffer

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.

Wartość domyślna: ""

Zwroty

()

Przykłady kodu

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)

Zdarzenia