float rgb;
for (int i = 0; i < bytes; i += 4)
{
rgb = pixelBuffer[i] * .071f;
rgb += pixelBuffer[i + 1] * .71f;
rgb += pixelBuffer[i + 2] * .21f;
pixelBuffer[i] = (byte)rgb;
pixelBuffer[i + 1] = pixelBuffer[i];
pixelBuffer[i + 2] = pixelBuffer[i];
pixelBuffer[i + 3] = 255;
}
int kernelSize = 3;
int kernelOffset = (kernelSize - 1) / 2;
int calcOffset = 0;
int byteOffset = 0;
for (int y = kernelOffset; y < height - kernelOffset; y++)
{
for (int x = kernelOffset; x < width - kernelOffset; x++)
{
byte value = 255;
byteOffset = y * srcData.Stride + x * 4;
for (int ykernel = -kernelOffset; ykernel <= kernelOffset; ykernel++)
{
for (int xkernel = -kernelOffset; xkernel <= kernelOffset; xkernel++)
{
if (kernel[ykernel + kernelOffset,xkernel + kernelOffset] == 1)
{
calcOffset = byteOffset + ykernel * srcData.Stride + xkernel * 4;
value = Math.Min(value, pixelBuffer[calcOffset]);
}
else
{
continue;
}
}
}
resultBuffer[byteOffset] = value;
resultBuffer[byteOffset + 1] = value;
resultBuffer[byteOffset + 2] = value;
resultBuffer[byteOffset + 3] = 255;
}
}
Bitmap result = new Bitmap(width, height);
BitmapData resultData = result.LockBits(canvas, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
Marshal.Copy(resultBuffer, 0, resultData.Scan0, bytes);
result.UnlockBits(resultData);
return result;
for (int i = 0; i < bytes; i += 4)
{
rgb = pixelBuffer[i] * .071f;
rgb += pixelBuffer[i + 1] * .71f;
rgb += pixelBuffer[i + 2] * .21f;
pixelBuffer[i] = (byte)rgb;
pixelBuffer[i + 1] = pixelBuffer[i];
pixelBuffer[i + 2] = pixelBuffer[i];
pixelBuffer[i + 3] = 255;
}
int kernelSize = 3;
int kernelOffset = (kernelSize - 1) / 2;
int calcOffset = 0;
int byteOffset = 0;
for (int y = kernelOffset; y < height - kernelOffset; y++)
{
for (int x = kernelOffset; x < width - kernelOffset; x++)
{
byte value = 255;
byteOffset = y * srcData.Stride + x * 4;
for (int ykernel = -kernelOffset; ykernel <= kernelOffset; ykernel++)
{
for (int xkernel = -kernelOffset; xkernel <= kernelOffset; xkernel++)
{
if (kernel[ykernel + kernelOffset,xkernel + kernelOffset] == 1)
{
calcOffset = byteOffset + ykernel * srcData.Stride + xkernel * 4;
value = Math.Min(value, pixelBuffer[calcOffset]);
}
else
{
continue;
}
}
}
resultBuffer[byteOffset] = value;
resultBuffer[byteOffset + 1] = value;
resultBuffer[byteOffset + 2] = value;
resultBuffer[byteOffset + 3] = 255;
}
}
Bitmap result = new Bitmap(width, height);
BitmapData resultData = result.LockBits(canvas, ImageLockMode.WriteOnly, PixelFormat.Format32bppArgb);
Marshal.Copy(resultBuffer, 0, resultData.Scan0, bytes);
result.UnlockBits(resultData);
return result;
No comments:
Post a Comment