Nasıl yapılır: Yeniden Renk Eşleme Tablosu Kullanma

Yeniden eşleme, bir görüntüde renk yeniden eşleme tablosuna göre renkleri dönüştürme işlemidir. Renk yeniden eşleme tablosu bir nesne ColorMap dizisidir. Dizide ColorMap her nesnenin bir özelliği ve bir özelliği OldColorNewColor vardır.

Bir GDI+ resim çizin, görüntünün her pikseli eski renkler dizisiyle karşılaştırıldı. Pikselin rengi eski bir renkle eş olursa, rengi karşılık gelen yeni renge değiştirilir. Renkler yalnızca işleme için değiştirilir; görüntünün kendi renk değerleri (veya nesnesinde ImageBitmap depolanır) değişmez.

Yeniden eşlenen bir görüntü çizmek için bir nesne dizisi ColorMap başlatabilirsiniz. Bu diziyi SetRemapTable bir nesnenin ImageAttributes yöntemine ve ardından ImageAttributes nesnesini bir nesnenin DrawImage yöntemine Graphics iletir.

Örnek

Aşağıdaki örnek, dosya Image dosyasından bir nesnesi RemapInput.bmp. Kod, tek bir nesneden oluşan bir renk yeniden eşleme tablosu ColorMap oluşturur. OldColorNesnenin özelliği ColorRemap kırmızı, özelliği NewColor ise mavidir. Görüntü yeniden kırpma olmadan bir kez, yeniden kırpma ile bir kez çizilir. Yeniden kırpma işlemi tüm kırmızı pikselleri maviye değiştirir.

Aşağıdaki çizimde, sol tarafta özgün görüntü ve sağ tarafta yeniden eşlenen görüntü gösterilmiştir.

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ım için tasarlanmıştır ve olay PaintEventArgse işleyicinin bir parametresi Paint olan 'i gerektirir.

Ayrıca bkz.