EditableImage
*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.
EditableImage çalışma süresi oluşturma ve görüntü manipülasyonu için izin verir.
Boş bir EditableImage oluşturmak için, AssetService:CreateEditableImage() kullanın. Mevcut bir görüntüden EditableImage oluşturmak için, AssetService:CreateEditableImageAsync() kullanın.
EditableImage herhangi bir Content özelliğinde, örneğin ImageLabel.ImageContent veya MeshPart.TextureContent gibi bir görüntü alanında kullanılabilir.Bunun yapılması için içerik özelliğinin Content.fromObject(editableImage) olarak ayarlanması gerekir.
EditableImage koordinat sistemi, görüntünün sol üstüne göre mutlaktır:
- Üst sol: (0, 0)
- Sağ alt: (Size.X - 1, Size.Y - 1)
Bir nesneyi yayınlamak için özelliğine sahip bir nesneyi kullandığınızda, düzenlenebilir görüntü bir görüntü olarak yayınlanır ve özellik yeni bir varlık kimliğine ayarlanır.
Sınırları Güncelleme
Görüntü tarafında yalnızca bir tek EditableImage güncellenebilir per frame.Örneğin, şu anda gösterilen üç EditableImage nesneyi güncellerseniz, hepsinin güncellenmesi için üç çerçeve gerekecektir.
Yayınlanmış Deneyimlerin Etkinleştirilmesi
Güvenlik amaçlarıyla, EditableImage yayınlanmış deneyimler için varsayılan olarak başarısız olur.Kullanımı etkinleştirmek için, 13 yaşından büyük ve kimlik doğrulanmış olmalısınız.Doğrulandıktan sonra, Studio'nun Oyun Ayarlarını açın, Güvenlik seçin ve Mesh / Resim API'lerine İzin Verme geçişini etkinleştirin.
Yetkiler
Kötü kullanımı önlemek için, AssetService:CreateEditableImageAsync() sadece görüntü varlıklarını yüklemenizi ve düzenlemenizi sağlar:
- Deneyimin yaratıcısına ait olanlar (deneyim bir birey tarafından sahipleniyorsa).
- Bir grubun sahip olduğu (deneyim gruba aitse)
- Kayıtlı Studio kullanıcısına ait olanlar (yer dosyası henüz Roblox'a kaydedilmedi veya yayınlanmadıysa).
APİ'ler yukarıdaki kriterlere uymayan bir varlığı yüklemeye kullanılırsa bir hata verir.
Hafıza Sınırları
Düzenlenebilir varlıklar şu anda hafıza kullanımı için pahalıdır.Müşteri performansı üzerindeki etkisini en aza indirmek için, EditableImage çok sıkı müşteri tarafı bellek bütçelerine sahiptir, ancak sunucu, Studio ve pluginler sınırsız bellekle çalışır.Bir EditableImage bağlantı noktasını çoklu görüntüye ilişkin Content veri türlerine bağlayarak (çok referanslı) bellek optimizasyonuna yardımcı olabilir.
Özet
Yöntemler
- DrawCircle(center : Vector2,radius : number,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Belirtilen noktada bir daire çizer.
Verilen pozisyonda başka bir EditableImage çizer bu EditableImage içine.
Başka bir EditableImage projeyi bir EditableMesh içine yerleştirir ve sonucu bu EditableImage üzerine saklar.
- DrawImageTransformed(position : Vector2,scale : Vector2,rotation : number,image : EditableImage,options : Dictionary?):()
Boyutlandırma ve dönüşümler dahil olmak üzere bu EditableImage ile bir görüntü çizer ve belirtilen konuma yerleştirir.
Verilen iki nokta arasında bir çizgi çizer.
- DrawRectangle(position : Vector2,size : Vector2,color : Color3,transparency : number,combineType : Enum.ImageCombineType):()
Verilen üst sol konumda verilen boyutta bir dikdörtgen çizer.
Piksel bir dikdörtgen bölgeyi bir tampona okur.
Piksel bir dikdörtgen bölgeyi resme yazar.
Etkinlikler
Özellikler
Size
EditableImage pikseldeki boyut.Maksimum boyut 1024×1024'tir.Bir EditableImage yeniden boyutlandırılamaz; bu özellik sadece okunur.Bir görüntüyü yeniden boyutlandırmak veya kırpmak için, yeni bir EditableImage oluşturun ve içeriği aktarmak için DrawImageTransformed() kullanın; sonra Destroy() çağırın.
Yöntemler
Destroy
Görüntünün içeriğini yok eder ve kullanılan belleği hemen geri alır.
Dönüşler
DrawCircle
Belirtilen noktada EditableImage üzerinde bir daire çizer.Eğer çember yarı saydamsa, kaynağın üzerinde birleştirilerek arkasındaki piksellere karışacaktır.
Parametreler
Çemberin merkezi, EditableImage 'nin üst sol köşesine göre. Kanvas sınırlarının dışındaki pozisyonlara izin verilir.
Pikselde çemberin çevresi.
Çemberin rengi.
0'ın tümüyle opak olması ve 1'in tümüyle şeffaf olmasıyla çemberin şeffaflığı.
Kaynak görüntünün pikselleri eklenen görüntünün pikselleriyle nasıl birleştirilir.
Dönüşler
DrawImage
Verilen pozisyonda başka bir EditableImage çizer bu EditableImage içine.Yeni resmin sınırlarının dışındaki pozisyonlar, yalnızca yeni resmin bir kısmının çizilmesine izin verir.
Parametreler
Eklendiği görüntünün üst sol köşesi çizilecek pozisyon.
Bu EditableImage içine çizmek için EditableImage .
Kaynak görüntünün pikselleri eklenen görüntünün pikselleriyle nasıl birleştirilmelidir.
Dönüşler
DrawImageProjected
Belirtilen projeksiyon ve fırça yapılandırmasını kullanarak bir başka EditableImage projeyi bir EditableMesh içine aktarır ve sonucu bu EditableImage üzerinde saklar.
Parametreler
Proje etmek için kullanılan EditableMesh .
Aşağıdaki anahtar-değer çiftleri içeren projeksiyon yapılandırma sözlüğü:
Aşağıdaki anahtar-değer çiftleri de dahil olmak üzere fırça yapılandırma sözlüğü:
- AlphaBlendType ( Enum.ImageAlphaType ) bu projeksiyonun alfa değerlerini nasıl birleştireceğini belirler
- ColorBlendType ( Enum.ImageCombineType ) bu projeksiyonun renk değerlerini nasıl birleştireceğini belirler
- Decal ( EditableImage ) projeksiyon için kullanılan görüntü olarak.
- FadeAngle (number) projeksiyon kenarlarının düşmesi için derecelerdeki açı olarak.
- BlendIntensity (number) 0 ve 1 arasındaki değer olarak, projeksiyonun sonraki görüntüye ne kadar karıştırıldığını kontrol eden değer.
Dönüşler
DrawImageTransformed
Bu yöntem, ölçeklendirme ve dönüşüm gibi uygulanan dönüşümlerle bu EditableImage``EditableImage .Pozisyon parametri, kaynak görüntünün merkez noktasının dönüşümlerden sonra bu görüntüye yerleştirileceği yeri belirtir.Yeni resmin sınırlarının dışındaki pozisyonlar, yalnızca yeni resmin bir kısmının çizilmesine izin verir.
Parametreler
Kaynak görüntünün merkez noktasının bu görüntüye yerleştirileceği piksel pozisyonu.
Kaynak görüntüsü için X ve Y eksenleri boyunca ölçek faktörleri.
Kaynak görüntünün merkez noktası etrafında uygulanan dönme açısı, dereceler.
Bu resme çekilecek kaynak EditableImage .
Ekstra yapılandırma için opcional sözlük:
- CombineType : Kaynak görüntünün piksellerinin hedefle nasıl birleşeceğini belirtir. Varsayılanı Enum.ImageCombineType.AlphaBlend dır.
- SamplingMode : Örnekleme yöntemini belirtir (örneğin, lineer için Default veya en yakın komşu için Pixelated ). Varsayılan değer Enum.ResamplerMode.Default dir.
- PivotPoint : Ölçeklendirme ve dönüş için kaynak görüntüsündeki dönüş noktasını belirtir. Varsayılan, kaynak görüntünün merkezidir (yani Image.Size / 2 ).
Dönüşler
Kod Örnekleri
The following code draws a rotated and scaled image onto another.
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
}
)
Aşağıdaki kod, bir görüntünün EditableImage:DrawImageTransformed() yöntemi kullanılarak nasıl kırpılabileceğini gösterir.
local AssetService = game:GetService("AssetService")
-- Kaynak resim
local srcImage = AssetService:CreateEditableImageAsync(Content.fromUri(assetUri))
-- Ofset ve boyut tarafından tanımlanan kesme alanı
local cropOffset = Vector2.new(50, 50)
local cropSize = Vector2.new(100, 100)
-- Ekin alanının boyutuyla hedef görüntü
local dstImage = AssetService:CreateEditableImage({ Size = cropSize })
-- Pozisyon (üst sol köşe)
local position = Vector2.new(0, 0)
-- Ölçek faktörleri (ölçekleme yok)
local scale = Vector2.new(1, 1)
-- Döndürme açısı (döndürme yok)
local rotation = 0
-- Kaynağı görüntüyü, görüntüyü kırpmak için ayarlanmış bir pivotla hedef görüntüsüne çizin
dstImage:DrawImageTransformed(position, scale, rotation, srcImage, {
CombineType = Enum.ImageCombineType.Overwrite,
PivotPoint = cropOffset, -- Ortadan noktayı çizmeye başlamak için cropOffset'a ayarlayın
})
DrawLine
Verilen noktalar arasında EditableImage bir piksel kalınlığında anti-aliased bir çizgi çizer.
Parametreler
Hattın başlangıç noktası.
Hattın son noktası.
Hattın rengi.
Hattın transparanlığı.
Kaynak görüntünün pikselleri eklenen görüntünün pikselleriyle nasıl birleştirilir.
Dönüşler
DrawRectangle
Verilen boyutun EditableImage üzerinde verilen sol üst konumda bir dikdörtgen çizer.
Parametreler
Dikdörtgenin en üst sol konumu. Diğer çizim yöntemlerinden farklı olarak, bu EditableImage kanvas sınırlarının dışında olmayabilir.
Çizilecek dikdörtgenin boyutu, piksel olarak.
Dikdörtgenin rengi.
Dikdörtgenin transparanlığı.
Kaynak görüntünün pikselleri eklenen görüntünün pikselleriyle nasıl birleştirilir.
Dönüşler
ReadPixelsBuffer
Bir EditableImage 'dan piksel olarak dikdörtgen bir bölgeyi okur ve bunu bir tampon olarak döndürür.Buffered'daki her sayı, dört bayttan oluşan bir sıraya depolanan piksellere sahip tek bir bayttır (kırmızı, yeşil, mavi ve alfa).
Bu yöntemin transparans yerine alfa kullandığını unutmayın, çizme yöntemlerinin aksine EditableImage.
Parametreler
Okuyacak piksel yuvarlak bölgenin üst sol köşesi.
Okuyacak piksel dikdörtgen bölgesinin boyutu.
Dönüşler
Her pikselin dört baytla temsil edildiği yerleme alanı (kırmızı, yeşil, mavi ve alfa'ya göre sırasıyla).Buffer'ın uzunluğu Size.X * Size.Y * 4 bayt olarak hesaplanabilir.
Kod Örnekleri
The following code reads two pixels from a EditableImage and creates a part with the average color between them.
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
Bir piksel yuvalarından bir dikdörtgen bölge yazıyor EditableImage bir tampondan.Buffered'daki her sayı, dört bayttan oluşan bir sıraya depolanan piksellere sahip tek bir bayttır (kırmızı, yeşil, mavi ve alfa).
Bu yöntemin transparans yerine alfa kullandığını unutmayın, çizme yöntemlerinin aksine EditableImage.
Parametreler
Pikselleri çizmek için dikdörtgen bölgenin üst sol köşesi.
Yazılacak piksel dikdörtgen bölgesinin boyutu.
Her pikselin dört baytla temsil edildiği bir tampon (kırmızı, yeşil, mavi ve alfa sırasıyla).Destekleyici uzunluğu Size.X * Size.Y * 4 bayt olmalıdır.
Dönüşler
Kod Örnekleri
The following code reads the pixels of a EditableImage and writes back the inverted color values of those pixels.
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)