我有一張圖片被分成四部分,我想通過RGB改變顏色,但只改變了一半。 1.change當圖片寬度小於256時失敗。 2.my小圖片最大不超過256. 3.每張256 * 256的圖片都是正常的。 4.問題值:r = 0,g = 0,b = 52。c#改變圖片的顏色,但只改變half.by gdi +
private void Adjust(Bitmap pBitmap, params int[] pValues)
{
BitmapData pBitmapData = pBitmap.LockBits(
new Rectangle(0, 0, pBitmap.Width, pBitmap.Height),
ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);
byte[] pData = new byte[pBitmapData.Stride * pBitmap.Height];
Marshal.Copy(pBitmapData.Scan0, pData, 0, pData.Length);
pBitmap.UnlockBits(pBitmapData);
int iOffset = pBitmapData.Stride - pBitmapData.Width * 3;
int iIndex = 0;
for (int i = 0; i < pBitmapData.Height; i++)
{
for (int j = 0; j < pBitmapData.Width; j++)
{
for (int k = iIndex; k < iIndex + 3; k++)
{
pData[k] = Adjust(pData[k], k);
}
iIndex += 3;
}
iIndex += iOffset;
}
Marshal.Copy(pData, 0, pBitmapData.Scan0, pData.Length);
//pBitmap.UnlockBits(pBitmapData);
}
protected byte Adjust(byte iValue, int iIndex)
{
int nColour = 0;
switch (iIndex % 3)
{
case 0:
nColour = (int)iValue + m_iBlue;
break;
case 1:
nColour = (int)iValue + m_iGreen;
break;
case 2:
nColour = (int)iValue + m_iRed;
break;
}
return nColour;
}
原始照片,而無需使用問題參數:使用問題參數
原始圖像改變顏色:
我稍微被這裏的標記有關 - GDI +從未在asp.net背景下官方支持。 –
我認爲增加步幅差異會讓它變得混亂。如果iOffset不是3的倍數,那麼您的k%3將不會在第一行之後的0,1,2的順序中。 – Nyerguds