EditableImage
*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.
EditableImage memungkinkan pembuatan dan manipulasi gambar saat eksekusi.
Untuk membuat EditableImage kosong, gunakan AssetService:CreateEditableImage() . Untuk membuat EditableImage dari gambar yang sudah ada, gunakan 1> Class.AssetService:CreateEditableImageAsync()1> .
Class.EditableImage dapat digunakan di setiap Content property yang mengambil gambar, seperti ImageLabel.ImageContent atau 0> Class.MeshPart.TextureContent0> . Ini dilakukan dengan menetapkan konten property ke 3> Datatype.Content.fromObject(editableImage)</
Sistem koordinasi EditableImage adalah relatif terhadap bagian atas kiri gambar:
- Top-kiri: (0, 0)
- Bawah: kanan: (Size.X - 1, Size.Y - 1)
Ketika Anda menggunakan AssetService:PromptCreateAssetAsync() untuk menerbitkan objek yang memiliki Content propietas y referensi ke EditableImage, gambar yang dapat diubah diterbitkan sebagai gambar dan prop adalah tetap sebagai ID baru.
Mengaktifkan EditableImage untuk Pengalaman Terbit
Untuk tujuan keamanan, menggunakan EditableImage gagal secara default untuk pengalaman yang diterbitkan. Untuk mengaktifkan penggunaan EditableImage, Anda harus berusia 13+ dan ID yang diverifikasi. Setelah Anda diverifikasi, buka **Studio. Select
Izinkan
Untuk mencegah penyalahgunaan, AssetService:CreateEditableImageAsync() hanya memungkinkan Anda untuk memuat dan mengedit aset gambar:
- Itu dimiliki oleh pembuatnya pengalaman (jika pengalaman dimiliki oleh seorang individu).
- Itu dimiliki oleh kelompok (jika pengalaman dimiliki oleh grup).
- Itu dimiliki oleh pengguna Studio yang masuk (jika file tempat belum disimpan atau diterbitkan ke Roblox).
API menyebabkan kesalahan jika mereka digunakan untuk memuat aset yang tidak memenuhi kriteria di atas.
Rangkuman
Metode
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
Menggambar lingkaran di titik yang ditentukan.
Menggambar another EditableImage into this EditableImage at the given position.
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : Object,options : Dictionary?):void
Menggambar gambar ke dalam EditableImage ini dengan transformasi termasuk skalierung dan rotasi, menempatkannya di posisi yang ditentukan.
Menggambar garis antara dua poin yang disediakan.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):void
Menggambar segi empat dari ukuran yang diberikan di posisi atas kiri yang diberikan.
Membaca wilayah pixel yang panjang menjadi bufffer.
Menulis wilayah piksel yang panjang ke dalam gambar.
Properti
Size
Ukuran EditableImage dalam pixel. Ukuran maksimum adalah 1024×1024. Sebuah EditableImage tidak dapat diubah; property ini hanya dibaca. Unt
Metode
Destroy
Menghancurkan konten gambar, segera mengklaim kembali memori yang digunakan.
Memberikan nilai
DrawCircle
Menggambar lingkaran di titik yang ditentukan di EditableImage . Jika lingkaran semi-transparan, itu akan dicampur dengan pixel di belakang menggunakan sumber over bluring.
Parameter
Pusat dari lingkaran, relatif ke sudut atas kiri dari EditableImage . Posisi di luar batas kanvas diperbolehkan.
Radius dari lingkaran dalam pixel.
Warna lingkaran.
Transparansi lingkaran dengan 0 menjadi benar-benar opak dan 1 menjadi benar-benar transparan.
Bagaimana pixel dari gambar sumber dicampur dengan pixel dari gambar yang ditambahkan.
Memberikan nilai
DrawImage
Menggambar another EditableImage into this EditableImage at the given position. Posisi di luar batas kanvas diizinkan sehingga hanya bagian dari gambar baru yang dibuat.
Parameter
Posisi di mana sudut kiri atas gambar yang ditambahkan akan dibuat.
Class.EditableImage untuk menarik ke dalam ini EditableImage .
Bagaimana pixel dari gambar sumber harus dicampur dengan pixel dari gambar yang ditambahkan.
Memberikan nilai
DrawImageProjected
Parameter
Memberikan nilai
DrawImageTransformed
Metode ini memungkinkan Anda menarik EditableImage ke dalam EditableImage ini dengan transformasi diterapkan, seperti skalierung dan rotasi. Posisi parameter menentukan di mana posisi pivot dari gambar sumber akan ditempatkan di gambar ini setelah transformasi. Posisi di luar batas kanvas diizinkan sehingga hanya bagian dari gambar baru yang dibuat.
Parameter
Posisi dalam pixel di mana titik pivot gambar sumber akan ditempatkan di gambar ini.
Mengubah faktor skalasi untuk gambar sumber di sumbu X dan Y.
Sudut rotasi dalam derajat, diterapkan di sekitar titik pivot gambar sumber.
Sumber EditableImage untuk ditarik ke dalam gambar ini.
Diksiopter dictionaire untuk konfigurasi tambahan:
- CombineType : Menentukan cara pixel gambar sumber bergabung dengan Destinasi. Standar adalah Enum.ImageCombineType.AlphaBlend .
- SamplingMode : Spesifikasi metode samplning (misalnya Default untuk bilinear atau Pixelated untuk tetangga terdekat). Standar adalah 0> Enum.ResamplerMode.Default0> .
- PivotPoint : Menentukan titik pivot dalam gambar sumber untuk skalierung dan rotasi. Standar adalah pusat gambar sumber (yaitu Image.Size / 2).
Memberikan nilai
Contoh Kode
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
}
)
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
Menggambar garis anti-aliased pada EditableImage satu pixel kayu antara dua poin yang disediakan.
Parameter
Awali titik garis.
Akhir poin dari garis.
Warna garis.
Transparansi dari garis.
Bagaimana pixel dari gambar sumber dicampur dengan pixel dari gambar yang ditambahkan.
Memberikan nilai
DrawRectangle
Menggambar segi empat di EditableImage dari ukuran yang diberikan di posisi atas kiri yang diberikan.
Parameter
Posisi bagian atas kiri dari persegi. Tidak seperti metode pembuatan lainnya, ini tidak dapat dibuat di luar batas kanvas Class.EditableImage .
Ukuran persegi untuk ditambahkan, dalam pixel.
Warna persegi.
Transparansi persegi.
Bagaimana pixel dari gambar sumber dicampur dengan pixel dari gambar yang ditambahkan.
Memberikan nilai
ReadPixelsBuffer
Sebuah versi dari ReadPixels() yang mengembalikan cache bukan tabel. Setiap nomor dalam cache adalah satu bit, sementara setiap nomor dalam tabel adalah 4 bit, menjadikan ReadPixelsBuffer() lebih efisien daripada
Catat bahwa metode ini menggunakan alfa bukan transparansi, berbeda dengan metode EditableImage menggambar.
Parameter
Sudut kanan atas dari sudut region piksel untuk dilihat.
Ukuran wilayah persegi pixel untuk dilihat.
Memberikan nilai
Buffer di mana setiap pixel diwakili oleh empat bit (merah, hijau, biru, dan alfa masing-masing). Panjang buffer dapat dihitung sebagai Size.X * Size.Y * 4 bytes.
Contoh Kode
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
Sebuah versi dari WritePixels() yang mengambil cache bukan tabel. Setiap nomor dalam cache adalah satu bit, sementara setiap nomor dalam tabel adalah 4 bit, menjadikan WritePixelsBuffer() lebih efisien daripada
Catat bahwa metode ini menggunakan alfa bukan transparansi, berbeda dengan metode EditableImage menggambar.
Parameter
Sudut kiri atas dari daerah persegi untuk menarik pixel ke dalam.
Ukuran wilayah persegi pixel untuk ditulis.
Sebuah buffer di mana setiap pixel diwakili oleh empat bit (merah, hijau, biru, dan alfa masing-masing). Panjang buffer harus menjadi Size.X * Size.Y * 4 bytes.
Memberikan nilai
Contoh Kode
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)