gpt4 book ai didi

c# - 将 PNG 拆分为 RGB 和 Alpha channel

转载 作者:行者123 更新时间:2023-11-30 20:59:58 24 4
gpt4 key购买 nike

我正在尝试对 PNG 文件进行一些自动处理,这些文件接收一个 RGBa .png 文件并输出两个 jpeg 文件:1 个只是 RGB channel ,另一个只是 alpha channel ,作为灰度图像.

有没有办法在 C# 中本地执行此操作?如果需要第三方库,只要它是免费/开源的就可以,但我更愿意直接使用 GDI 或其他东西来完成。

最佳答案

这是我的工作代码:

    /// <summary>
/// Split PNG file into two JPGs (RGB and alpha)
/// </summary>
private void SplitPngFileIntoRGBandAplha(string imagePath)
{
try
{
// Open original bitmap
var bitmap = new Bitmap(imagePath);

// Rectangle
var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);

// Get RGB bitmap
var bitmapInRgbFormat = bitmap.Clone(rect, PixelFormat.Format32bppRgb);

// Read bitmap data
BitmapData bmData = bitmap.LockBits(rect, ImageLockMode.ReadOnly, bitmap.PixelFormat);

// Prepare alpha bitmap
var alphaBitmap = new Bitmap(bmData.Width, bmData.Height, PixelFormat.Format32bppRgb);

for (int y = 0; y <= bmData.Height -1; y++)
{
for (int x = 0; x <= bmData.Width -1; x++)
{
Color PixelColor = Color.FromArgb(Marshal.ReadInt32(bmData.Scan0, (bmData.Stride * y) + (4 * x)));
if (PixelColor.A > 0 & PixelColor.A <= 255)
{
alphaBitmap.SetPixel(x, y, Color.FromArgb(PixelColor.A, PixelColor.A, PixelColor.A, PixelColor.A));
}
else
{
alphaBitmap.SetPixel(x, y, Color.FromArgb(0, 0, 0, 0));
}
}
}

bitmap.UnlockBits(bmData);

// Prepare JPG format
ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
var encoder = Encoder.Quality;
var encoderParameters = new EncoderParameters(1);
var encoderParameter = new EncoderParameter(encoder, 100L);
encoderParameters.Param[0] = encoderParameter;

// Save RGB bitmap
bitmapInRgbFormat.Save(imagePath.Replace("png", "jpg"), jgpEncoder, encoderParameters);

// Save Alpha bitmpa
alphaBitmap.Save(imagePath.Replace(".png", "_alpha.jpg"), jgpEncoder, encoderParameters);

bitmap.Dispose();
bitmapInRgbFormat.Dispose();
bitmap.Dispose();

// Delete bitmap
System.IO.File.Delete(imagePath);
}
catch(Exception e)
{
// Handle exception
}

}

关于c# - 将 PNG 拆分为 RGB 和 Alpha channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15207815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com