LibTiff.Net 彩色图像转换

发布于 2024-09-27 14:16:36 字数 1140 浏览 6 评论 0原文

我正在使用 Bit Miracle LibTiff.Net。

我找不到任何示例代码来获取 32bpp ARGB 彩色图像并使用此库将位图写入 TIFF。

还有其他人尝试过吗?

这是我的示例代码。它会生成一个文件,但我拥有的任何软件都无法查看该文件。

编辑:代码现在可以工作,但颜色错误!

public static void WriteTiff(Image image, string fileName)
{
    Bitmap target = image as Bitmap;
    BitmapData bmd = target.LockBits(
        target.GetRectangle(),
        ImageLockMode.ReadOnly,
        PixelFormat.Format32bppArgb);
    var bits = new byte[bmd.Stride * bmd.Height];
    Marshal.Copy(bmd.Scan0, bits, 0, bits.Length);
    target.UnlockBits(bmd);

    Tiff tiff = Tiff.Open(fileName, "w");
    tiff.SetField(TiffTag.IMAGEWIDTH, target.Width);
    tiff.SetField(TiffTag.IMAGELENGTH, target.Height);
    tiff.SetField(TiffTag.COMPRESSION, Compression.NONE);
    tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.RGB);
    tiff.SetField(TiffTag.BITSPERSAMPLE, 8);
    tiff.SetField(TiffTag.SAMPLESPERPIXEL, 4);
    tiff.SetField(TiffTag.ROWSPERSTRIP, target.Height);
    tiff.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);

    tiff.WriteEncodedStrip(0, bits, bits.Length);
    tiff.Close();
}

谢谢

I am using Bit Miracle LibTiff.Net.

I cannot find any sample code to take a 32bpp ARGB colour image and write the bitmap to a TIFF using this library.

Has anyone else attempted this?

Here is my sample code. It produces a file, but it cannot be viewed by any software that I have.

EDIT: The code now works, but the colors are wrong!

public static void WriteTiff(Image image, string fileName)
{
    Bitmap target = image as Bitmap;
    BitmapData bmd = target.LockBits(
        target.GetRectangle(),
        ImageLockMode.ReadOnly,
        PixelFormat.Format32bppArgb);
    var bits = new byte[bmd.Stride * bmd.Height];
    Marshal.Copy(bmd.Scan0, bits, 0, bits.Length);
    target.UnlockBits(bmd);

    Tiff tiff = Tiff.Open(fileName, "w");
    tiff.SetField(TiffTag.IMAGEWIDTH, target.Width);
    tiff.SetField(TiffTag.IMAGELENGTH, target.Height);
    tiff.SetField(TiffTag.COMPRESSION, Compression.NONE);
    tiff.SetField(TiffTag.PHOTOMETRIC, Photometric.RGB);
    tiff.SetField(TiffTag.BITSPERSAMPLE, 8);
    tiff.SetField(TiffTag.SAMPLESPERPIXEL, 4);
    tiff.SetField(TiffTag.ROWSPERSTRIP, target.Height);
    tiff.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);

    tiff.WriteEncodedStrip(0, bits, bits.Length);
    tiff.Close();
}

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

剪不断理还乱 2024-10-04 14:16:36

编辑
最新版本的 LibTiff.Net 包含将 System.Drawing.Bitmap 转换为 32 位24 位 颜色 LZW 压缩 TIFF 图像。

还有将 TIFF 图像转换为 32 位 或 24 位 System.Drawing.Bitmaps。
/编辑

您可能还想查看“使用 LibTiff.Net 进行图形编程”(第 1 部分第 2 部分) 文章
在文档中。它应该为您提供有关创建的基本信息
彩色 TIFF 文件。

免责声明:我是图书馆的维护者之一。

EDIT
The latest build of LibTiff.Net contains samples for conversion of a System.Drawing.Bitmap to 32-bit or 24-bit color LZW compressed TIFF images.

There is also samples for conversion of a TIFF image to 32-bit or 24-bit System.Drawing.Bitmaps.
/EDIT

You may also want to review "Graphics programming with LibTiff.Net" (part 1, part 2) article
in documentation. It should give you basic information about creating
color TIFF files.

Disclaimer: I am one of the maintainers of the library.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文