Aracılığıyla paylaş


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.

Screenshot showing the original image and the remapped image.

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.