2013-07-20 57 views
0

所以我在做這個項目,併爲粉色某種原因不會去透明的,這裏是我的代碼:圖像沒有被透明

if (chatIcons.GetPixel(x, y) == Color.FromArgb(255, 0, 255) || chatIcons.GetPixel(x, y) == Color.FromArgb(0, 255, 255)) 
{ 
chatIcons.SetPixel(x, y, Color.FromArgb(0, 0, 0, 0)); 
} 

0,255,255是青色(作品) 255,0,255是粉紅色(不起作用) 這是爲什麼?代碼在一點上工作,但不在另一點上。

哦,這裏是我的形象: enter image description here

+1

理想情況下,它應該工作...你檢查它是否確切0,255,255? –

+0

也許試試'新顏色(0,0,0,0)' – user1306322

+0

也255,0,0255是粉紅色和0,255,255是青色。 –

回答

1

如果它的位圖(如果你的圖像支持alpha),你可以試試這個:

chatIcons = ChangeColor(chatIcons,(byte)255,(byte)0,(byte)255); 

public static Bitmap ChangeColor(Bitmap sourceBitmap, byte blue, byte green, byte red) 
{ 
     BitmapData sourceData = sourceBitmap.LockBits(new Rectangle(0, 0, 
            sourceBitmap.Width, sourceBitmap.Height), 
            ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); 

     byte[] pixelBuffer = new byte[sourceData.Stride * sourceData.Height]; 

     Marshal.Copy(sourceData.Scan0, pixelBuffer, 0, pixelBuffer.Length); 

     sourceBitmap.UnlockBits(sourceData); 

     for (int k = 0; k + 4 < pixelBuffer.Length; k += 4) 
     { 
      if (pixelBuffer[k] == blue && pixelBuffer[k + 1] == green && pixelBuffer[k + 2] == red) 
      { 
       pixelBuffer[k] = 0; 
       pixelBuffer[k + 1] = 0; 
       pixelBuffer[k + 2] = 0; 
       pixelBuffer[k + 3] = 0; 
      } 
     } 

     Bitmap resultBitmap = new Bitmap(sourceBitmap.Width, sourceBitmap.Height); 

     BitmapData resultData = resultBitmap.LockBits(new Rectangle(0, 0, 
            resultBitmap.Width, resultBitmap.Height), 
            ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb); 

     Marshal.Copy(pixelBuffer, 0, resultData.Scan0, pixelBuffer.Length); 
      resultBitmap.UnlockBits(resultData); 

     return resultBitmap; 
} 
+0

哦哇,運行良好,除了右下方有1個洋紅色像素。 – bloodless2010

+0

這可能是一個圖像的問題,因爲我使用相同的代碼,使水色透明,它工作正常,我非常感謝這謝謝你。 – bloodless2010

+0

奇怪,編輯圖像後仍不起作用,? – bloodless2010

0

您的位圖對象都支持alpha通道,像PixelFormats.Bgra32

+0

我會如何支持Alpha通道? – bloodless2010

+0

檢查圖像的像素格式屬性。 – terrybozzio

1

我Axialis打開圖像,並提出了與此的的PixelFormat結果(沒有修改,但放大捕獲)...

zoomed

所以這會導致這樣的結論:在圖像內的編碼使得粉紅色像素被SOME解碼器解釋爲透明而不是其他解碼器。 Photoshop按預期解碼並呈現圖像。您可能需要在Photoshop下打開並保存它,以覆蓋任何影響粉紅色像素的編碼。

關於您的顏色檢測代碼。使用Photoshop進行非常深的縮放顯示了大量的人工製品,以至於諸如您的精確檢測方法可能會在大約10-20%的像素中出現故障。你可以考慮沿着「IsNearlyPink」下面

Photoshop的變焦線的檢測方法...

enter image description here

+0

嗯,我不明白,在GIMP它是堅實的粉紅色:S – bloodless2010

+0

@ bloodless2010,編輯添加Photoshop zoom –

+0

我剛下載Axialis並打開圖像,它仍然是粉紅色。編輯:哦,等我現在看到它。 – bloodless2010