Nasıl yapılır: Yeniden Renk Eşleme Tablosu Kullanma
Yeniden eşleme, bir resimdeki renkleri renk yeniden eşleme tablosuna göre dönüştürme işlemidir. Renk yeniden eşleme tablosu bir nesne dizisidir ColorMap . Dizideki her ColorMap nesnenin bir OldColor özelliği ve özelliği NewColor vardır.
GDI+ bir görüntü çizdiğinde, görüntünün her pikseli eski renk dizisiyle karşılaştırılır. Bir pikselin rengi eski bir renkle eşleşiyorsa, rengi ilgili yeni renge değiştirilir. Renkler yalnızca işleme için değiştirilir; görüntünün kendi renk değerleri (bir Image veya Bitmap nesnede depolanır) değiştirilmez.
Yeniden eşlenmiş bir görüntü çizmek için bir nesne dizisi ColorMap başlatın. Bu diziyi bir ImageAttributes nesnenin SetRemapTable yöntemine geçirin ve sonra nesnesini bir Graphics nesnenin DrawImage yöntemine geçirinImageAttributes.
Örnek
Aşağıdaki örnek, RemapInput.bmp dosyasından bir Image nesne oluşturur. Kod, tek ColorMap bir nesneden oluşan bir renk yeniden eşleme tablosu oluşturur. OldColor nesnesinin ColorRemap
özelliği kırmızı ve NewColor özelliği mavidir. Resim, yeniden eşleme olmadan bir kez ve yeniden eşleme ile bir kez çizilir. Yeniden eşleme işlemi tüm kırmızı pikselleri maviye değiştirir.
Aşağıdaki çizimde, soldaki özgün resim ve sağda yeniden eşlenen görüntü gösterilmektedir.
Image image = new Bitmap("RemapInput.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
ColorMap colorMap = new ColorMap();
colorMap.OldColor = Color.FromArgb(255, 255, 0, 0); // opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255); // opaque blue
ColorMap[] remapTable = { colorMap };
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);
e.Graphics.DrawImage(image, 10, 10, width, height);
e.Graphics.DrawImage(
image,
new Rectangle(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
GraphicsUnit.Pixel,
imageAttributes);
Dim image As New Bitmap("RemapInput.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim colorMap As New ColorMap()
colorMap.OldColor = Color.FromArgb(255, 255, 0, 0) ' opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255) ' opaque blue
Dim remapTable As ColorMap() = {colorMap}
imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap)
e.Graphics.DrawImage(image, 10, 10, width, height)
' Pass in the destination rectangle (2nd argument), the upper-left corner
' (3rd and 4th arguments), width (5th argument), and height (6th
' argument) of the source rectangle.
e.Graphics.DrawImage( _
image, _
New Rectangle(150, 10, width, height), _
0, 0, _
width, _
height, _
GraphicsUnit.Pixel, _
imageAttributes)
Kod Derleniyor
Yukarıdaki örnek, Windows Forms ile kullanılmak üzere tasarlanmıştır ve olay işleyicisinin Paint parametresi olan öğesini gerektirir.PaintEventArgse
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin