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

Właściwości

Metody

Właściwości

Tylko do odczytu
Bez replikacji
Odczyt równoległy

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

void

Niszczy zawartość obrazu, natychmiastowo odsysając używany pamięci.


Zwroty

void

DrawCircle

void

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

center: Vector2

Centrum kруgu, w stosunku do górnego lewego kąta EditableImage . Pozycje poza obszarem płótna są dozwolone.

radius: number

Okrąg wokół których w pikselach.

color: Color3

Kolor kręgu.

transparency: number

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

void

DrawImage

void

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

position: Vector2

Pozycja, w której lewy górny róg dodanego obrazu zostanie rysowany.

image: Object

Class.EditableImage do rysowania w ten EditableImage .

Jak piksely obrazu źródłowego powinny być mieszane z pikselami dodanego obrazu.


Zwroty

void

DrawImageProjected

void

Parametry

mesh: Object
projection: Dictionary
brushConfig: Dictionary

Zwroty

void

DrawImageTransformed

void

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

position: Vector2

Pozycja w pikselach, gdzie punkt pivot źródła będzie umieszczony na tym obrazie.

scale: Vector2

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

rotation: number

Kąt obrotowy w stopniach, zastosowany wokół punktu obrotowego źródła obrazu.

image: Object

Źródło EditableImage do tego obrazu.

options: Dictionary

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

void

Przykłady kodu

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
}
)
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

void

Rysuje anty-aliased line on the EditableImage jeden pixel thick between the two provided points.

Parametry

Początek linii.

Koniec punktu linii.

color: Color3

Kolor linii.

transparency: number

Przezroczystość linii.

Jak piksely obrazu źródłowego są mieszane z pikselami dodanego obrazu.


Zwroty

void

DrawRectangle

void

Rysuje prostopadło na EditableImage dostępnym rozmiarem w danej pozycji góry lewej.

Parametry

position: Vector2

Pozycja góry lewej prostokąta. W przeciwieństwie do innych metod rysowania nie może być poza zakresem płótna EditableImage .

size: Vector2

Rozmiar prostokątu do rysowania, w pikselach.

color: Color3

Kolor prostokątu.

transparency: number

Przezroczystość prostokąta.

Jak piksely obrazu źródłowego są mieszane z pikselami dodanego obrazu.


Zwroty

void

ReadPixelsBuffer

Zapis równoległy

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

position: Vector2

Prawy górny roóg regionu kwadratów do przeczytane.

size: Vector2

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

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 = 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

void

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

position: Vector2

Prawy górny roóg regionu prostopadłego, aby wciągnąć pikseli.

size: Vector2

Rozmiar prostopadłego obszaru pikseli do zapisu.

buffer: buffer

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

void

Przykłady kodu

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))
end
editableImage:WritePixelsBuffer(Vector2.zero, editableImage.Size, pixelsBuffer)

Zdarzenia