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

Ukuran dari EditableImage dalam piksel.Ukuran maksimum adalah 1024×1024.Sebuah EditableImage tidak dapat diubah ukurannya; properti ini hanya dapat dibaca.Untuk menyesuaikan ukuran atau memotong gambar, buat baru EditableImage dan gunakan DrawImageTransformed() untuk mentransfer konten; lalu panggil Destroy() .

Metode

Destroy

()

Menghancurkan konten gambar, segera mengambil kembali memori yang digunakan.


Memberikan nilai

()

DrawCircle

()

Menggambar lingkaran di titik yang ditentukan pada EditableImage .Jika lingkaran semi-transparan, itu akan dicampur dengan piksel di belakangnya menggunakan sumber over blending.

Parameter

center: Vector2

Pusat dari lingkaran, relatif dengan sudut kiri atas dari EditableImage. Posisi di luar batas kanvas diizinkan.

Nilai Default: ""
radius: number

Jari lingkaran dalam piksel.

Nilai Default: ""
color: Color3

Warna lingkaran.

Nilai Default: ""
transparency: number

Transparansi lingkaran dengan 0 menjadi benar-benar opak dan 1 menjadi benar-benar transparan.

Nilai Default: ""

Bagaimana piksel dari gambar sumber dicampur dengan piksel dari gambar yang ditambahkan.

Nilai Default: ""

Memberikan nilai

()

DrawImage

()

Menggambar lain EditableImage ke dalam ini EditableImage di posisi yang diberikan.Posisi di luar batas kanvas diizinkan sehingga hanya bagian dari gambar baru yang ditarik.

Parameter

position: Vector2

Posisi di mana sudut kiri atas dari gambar yang ditambahkan akan ditarik.

Nilai Default: ""

The EditableImage untuk menarik ke dalam ini EditableImage .

Nilai Default: ""

Bagaimana piksel dari gambar sumber harus dicampur dengan piksel gambar yang ditambahkan.

Nilai Default: ""

Memberikan nilai

()

DrawImageProjected

()

Proyek lain EditableImage ke dalam EditableMesh dan menyimpan hasilnya di ini EditableImage dengan menggunakan konfigurasi proyeksi dan sikat yang ditentukan.

Parameter

The EditableMesh digunakan untuk proyek ke dalam.

Nilai Default: ""
projection: Dictionary

Diksi konfigurasi proyeksi termasuk pas kunci-nilai berikut:

  • Direction ( Vector3 ) di mana proyektor menghadap.
  • Position ( Vector3 ) sebagai posisi di ruang lokal dengan menghormati mesh.
  • Size ( Vector3 ) sebagai ukuran proyektor.
  • Up ( Vector3 ) sebagai vektor atas proyektor di ruang lokal dengan menyangkut mesh.
Nilai Default: ""
brushConfig: Dictionary

Diksi konfigurasi sikat termasuk pas kunci-nilai berikut:

  • AlphaBlendType ( Enum.ImageAlphaType ) yang menentukan bagaimana proyeksi ini akan mencampur nilai alfa.
  • ColorBlendType ( Enum.ImageCombineType ) yang menentukan bagaimana proyeksi ini akan mencampur nilai warna.
  • Decal ( EditableImage ) sebagai gambar yang digunakan untuk proyeksi.
  • FadeAngle (number) sebagai sudut dalam derajat agar sisi proyeksi jatuh.
  • BlendIntensity (number) sebagai nilai antara 0 dan 1 yang mengontrol berapa banyak proyeksi yang dicampur ke dalam gambar hasil.
Nilai Default: ""

Memberikan nilai

()

DrawImageTransformed

()

Metode ini memungkinkan Anda menarik EditableImage ke dalam ini EditableImage dengan transformasi yang diterapkan, seperti skala dan rotasi.Parameter posisi menentukan di mana titik pivot dari gambar sumber akan ditempatkan pada gambar ini setelah transformasi.Posisi di luar batas kanvas diizinkan sehingga hanya bagian dari gambar baru yang ditarik.

Parameter

position: Vector2

Posisi dalam piksel di mana titik pivot dari gambar sumber akan ditempatkan di gambar ini.

Nilai Default: ""
scale: Vector2

Faktor skala untuk gambar sumber di sepanjang sumbu X dan Y.

Nilai Default: ""
rotation: number

Sudut rotasi dalam derajat, diterapkan di sekitar titik pivot gambar sumber.

Nilai Default: ""

Sumber EditableImage untuk ditarik ke dalam gambar ini.

Nilai Default: ""
options: Dictionary

Diksi opsional untuk konfigurasi tambahan:

  • CombineType : Menyatukan bagaimana piksel dari gambar sumber bergabung dengan piksel dari target. Nilai default adalah Enum.ImageCombineType.AlphaBlend .
  • SamplingMode : Menyediakan metode sampel (mis. Default untuk bilinear atau Pixelated untuk tetangga terdekat). Default adalah Enum.ResamplerMode.Default .
  • PivotPoint : Menyediakan titik pivot dalam gambar sumber untuk skala dan rotasi. Nilai default adalah pusat gambar sumber (yaitu Image.Size / 2 ).
Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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

Kode berikut menunjukkan bagaimana memotong gambar dapat dilakukan menggunakan metode EditableImage:DrawImageTransformed().

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

()

Menggambarkan garis anti-aliased pada EditableImage satu piksel tebal di antara dua titik yang disediakan.

Parameter

Titik awal dari baris.

Nilai Default: ""

Akhir titik dari baris.

Nilai Default: ""
color: Color3

Warna dari baris.

Nilai Default: ""
transparency: number

Transparansi dari baris.

Nilai Default: ""

Bagaimana piksel dari gambar sumber dicampur dengan piksel dari gambar yang ditambahkan.

Nilai Default: ""

Memberikan nilai

()

DrawRectangle

()

Menggambar segi empat di EditableImage dari ukuran yang diberikan di posisi bagian atas kiri yang diberikan.

Parameter

position: Vector2

Posisi bagian atas kiri dari segi segi. Tidak seperti metode menggambar lainnya, ini tidak bisa berada di luar batas kanvas dari EditableImage .

Nilai Default: ""
size: Vector2

Ukuran bilangan siku untuk menggambar, dalam piksel.

Nilai Default: ""
color: Color3

Warna dari segi empat.

Nilai Default: ""
transparency: number

Transparansi dari segi empat sudut.

Nilai Default: ""

Bagaimana piksel dari gambar sumber dicampur dengan piksel dari gambar yang ditambahkan.

Nilai Default: ""

Memberikan nilai

()

ReadPixelsBuffer

Tulis Paralel

Membaca wilayah persegi panjang dari piksel dari EditableImage dan mengembalikannya sebagai buffer.Setiap nomor di buffer adalah satu bit, dengan piksel disimpan dalam urutan empat bit (merah, hijau, biru, dan alfa).

Perhatikan bahwa metode ini menggunakan alfa bukan transparansi, tidak seperti metode menggambar EditableImage .

Parameter

position: Vector2

Sudut kiri atas dari wilayah segi empat berbentuk pixel untuk dibaca.

Nilai Default: ""
size: Vector2

Ukuran wilayah persegi panjang dari piksel untuk dibaca.

Nilai Default: ""

Memberikan nilai

Buffer di mana setiap piksel diwakili oleh empat bayt (merah, hijau, biru, dan alfa masing-masing).Panjang buffer dapat dihitung sebagai Size.X * Size.Y * 4 bytes.

Contoh Kode

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

()

Menulis wilayah persegi panjang piksel ke EditableImage dari buffer.Setiap nomor di buffer adalah satu bit, dengan piksel disimpan dalam urutan empat bit (merah, hijau, biru, dan alfa).

Perhatikan bahwa metode ini menggunakan alfa bukan transparansi, tidak seperti metode menggambar EditableImage .

Parameter

position: Vector2

Sudut kiri atas dari wilayah berbentuk persegi untuk menarik piksel ke dalam.

Nilai Default: ""
size: Vector2

Ukuran wilayah persegi panjang dari piksel untuk ditulis.

Nilai Default: ""
buffer: buffer

Buffer di mana setiap piksel diwakili oleh empat bayt (merah, hijau, biru, dan alfa masing-masing).Panjang buffer harus menjadi Size.X * Size.Y * 4 bytes.

Nilai Default: ""

Memberikan nilai

()

Contoh Kode

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)

Acara