我有一张图片被分成四部分,我想通过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