EditableImage

Tampilkan yang Tidak Digunakan Lagi

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Tidak Dapat Dibuat

EditableImage memungkinkan pembuatan dan manipulasi gambar selama runtime.

Untuk membuat kosong EditableImage , gunakan AssetService:CreateEditableImage() . Untuk membuat EditableImage dari gambar yang ada, gunakan AssetService:CreateEditableImageAsync() .

EditableImage dapat digunakan di setiap properti Content yang mengambil gambar, seperti ImageLabel.ImageContent atau MeshPart.TextureContent.Ini dilakukan dengan mengatur properti konten ke Content.fromObject(editableImage) .

Sistem koordinat EditableImage adalah relatif terhadap bagian atas kiri gambar:

  • Bagian atas kiri: (0, 0)
  • Bagian bawah kanan: (Size.X - 1, Size.Y - 1)

Ketika Anda menggunakan AssetService:PromptCreateAssetAsync() untuk mempublikasikan objek yang memiliki properti Content yang merujuk pada EditableImage , gambar yang dapat diedit dipublikasikan sebagai gambar dan properti diatur ke ID aset baru.

Perbarui Batasan

Hanya satu EditableImage tunggal dapat diperbarui per frame di sisi tampilan.Sebagai contoh, jika Anda memperbarui tiga objek EditableImage yang saat ini ditampilkan, itu akan memakan waktu tiga frame agar semuanya diperbarui.

Mengaktifkan untuk Pengalaman Terpublikasi

Untuk tujuan keamanan, menggunakan EditableImage gagal secara default untuk pengalaman yang dipublikasikan.Untuk mengaktifkan penggunaan, Anda harus berusia 13+ dan ID diverifikasi.Setelah Anda diverifikasi, buka Pengaturan Permainan Studio, pilih Keamanan , dan aktifkan toggle Izinkan API Mesh/Gambar .

Izin

Untuk mencegah penyalahgunaan, AssetService:CreateEditableImageAsync() hanya memungkinkan Anda untuk memuat dan mengedit aset gambar:

  • Yang dimiliki oleh pencipta pengalaman (jika pengalaman dimiliki oleh individu).
  • Yang dimiliki oleh kelompok (jika pengalaman dimiliki oleh kelompok).
  • Yang dimiliki oleh pengguna Studio yang masuk (jika file tempat belum disimpan atau dipublikasikan ke Roblox).

APIs membuang kesalahan jika digunakan untuk memuat aset yang tidak memenuhi kriteria di atas.

Batas-batas Memori

Aset yang dapat diedit saat ini mahal untuk penggunaan memori.Untuk mengurangi dampaknya terhadap kinerja klien, EditableImage memiliki anggaran memori klien yang ketat, meskipun server, Studio, dan plugin beroperasi dengan memori tak terbatas.Mengaitkan satu ke banyak jenis data terkait gambar (multireferensi) dapat membantu dengan optimisasi memori.

Rangkuman

Properti

  • Hanya Baca
    Tidak Direplikasi
    Baca Paralel

    Ukuran dari EditableImage dalam piksel.

Metode

Properti

Hanya Baca
Tidak Direplikasi
Baca Paralel

Metode

Destroy

()

Memberikan nilai

()

DrawCircle

()

Parameter

center: Vector2
Nilai Default: ""
radius: number
Nilai Default: ""
color: Color3
Nilai Default: ""
transparency: number
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

()

DrawImage

()

Parameter

position: Vector2
Nilai Default: ""
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

()

DrawImageProjected

()

Parameter

Nilai Default: ""
projection: Dictionary
Nilai Default: ""
brushConfig: Dictionary
Nilai Default: ""

Memberikan nilai

()

DrawImageTransformed

()

Parameter

position: Vector2
Nilai Default: ""
scale: Vector2
Nilai Default: ""
rotation: number
Nilai Default: ""
Nilai Default: ""
options: Dictionary
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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
}
)
Gambar yang Dapat Diubah: DrawImageTransformed() - Crop

local AssetService = game:GetService("AssetService")
-- Gambar sumber
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Area panen didefinisikan oleh offset dan ukuran
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Gambar tujuan dengan ukuran area panen
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Posisi (pojok kiri atas)
local position = Vector2.new(0, 0)
-- Faktor skala (tidak ada skala)
local scale = Vector2.new(1, 1)
-- Sudut rotasi (tidak berputar)
local rotation = 0
-- Menggambar gambar sumber ke gambar tujuan dengan pivot disesuaikan untuk memotong gambar
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Atur titik pivot untuk cropOffset untuk mulai menggambar dari sana
})

DrawLine

()

Parameter

Nilai Default: ""
Nilai Default: ""
color: Color3
Nilai Default: ""
transparency: number
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

()

DrawRectangle

()

Parameter

position: Vector2
Nilai Default: ""
size: Vector2
Nilai Default: ""
color: Color3
Nilai Default: ""
transparency: number
Nilai Default: ""
Nilai Default: ""

Memberikan nilai

()

ReadPixelsBuffer

Tulis Paralel

Parameter

position: Vector2
Nilai Default: ""
size: Vector2
Nilai Default: ""

Memberikan nilai

Contoh Kode

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

()

Parameter

position: Vector2
Nilai Default: ""
size: Vector2
Nilai Default: ""
buffer: buffer
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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)

Acara