問題タブ [libtiff]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - TiffLib が無効なファイルへのハンドルをリークする
で無効な TIFF ファイルを開こうとするとTIFFOpen()
、関数は を返しますNULL
。何らかの理由で、エラー ハンドラーが呼び出されません。ただし、ファイルは開いたままなので、同じプロセスから削除/上書きすることはできません。
TIFFFdOpen()
ハンドルを自分で閉じることができるように を使用してみましたが、何らかの理由で、有効な TIFF でこのエラーが発生します: 「TIFF ヘッダーを読み取れません」。今回は、エラー ハンドラを介してエラーが渡されます。
これらの問題のいずれかを解決するにはどうすればよいですか?
更新: 私はTIFFOpen()
それ自体の問題について話しているのであって、後で呼び出される関数の問題についてではありません。たとえば、TIFF ファイルのサイズがゼロの場合に発生する可能性があります。
c++ - 効率的な TIFF タイル抽出 C++
約 20000 x 20000 ピクセルの 1 GB の大きな tiff 画像を扱っています。ランダムな位置で、画像からいくつかのタイル (約 300x300 ピクセル) を抽出する必要があります。
私は次の解決策を試しました:
Libtiff (私が見つけた唯一の低レベル ライブラリ) は TIFFReadline() を提供しますが、これは約 19700 の不要なピクセルを読み取ることを意味します。
不要なピクセルを読み取らずに画像からタイルを抽出する独自の tiff リーダーを実装しました。もっと速いと思っていましたが、タイルのすべての行に対してシークを実行すると、非常に遅くなります。また、タイルを含むファイルのすべての行をバッファーに読み取ってから、バッファーからタイルを抽出しようとしましたが、結果はほぼ同じです。
タイル抽出ツールを改善するための提案を受け取りたいです!
すべてを歓迎します。私が使用できるより効率的なライブラリ、C/C++ I/O に関するヒント、私のニーズに対するより高いレベルの戦略などを提案していただけないでしょうか。
よろしく、フアン
c++ - LibTIFF: TIFF 画像からすべてのタグを抽出する
私は現在、TIFF 画像をすべてのタグを含むファイルとすべての画像データを含むファイルに分割し、これらのファイルから TIFF 画像を再構築する必要があるプロジェクトに取り組んでいます。唯一の問題は、LibTIFF が画像からすべてのタグを取得する簡単な方法を提供していないように見えることです。TIFFGetTagListCount を使用してから TIFFGetField を使用してタグを取得しようとしましたが、これはタグの小さなサブセットしか返しません。私は自分のバージョンを展開し始めましたが、これはライブラリに含める必要がある非常に明白な機能のように思われるため、何かを見落としていないことを再確認したいだけです。
c# - C# から LibTiff を使用する (タイル化された TIFF 画像にアクセスするため)
LibTiff を使用して非常に大きな TIFF ファイルにアクセスしたいと考えています。複数のページやタイルなどの機能が必要なので、LibTiff が正しい方法のようです。C# から LibTiff を使用する方法について誰か助けてもらえますか? 私はいくつかのリンクを見つけました (部分的なコードを含むblog.bee-ee のような. しかし、私はバージョンを取得する以上のことはできませんでした. FreeImageを見てきましたが、それは適切ではないことがわかりました (写真は約 800 MPixel 8 または 16 です)ビット グレースケール --> 800-1600 MByte) のサイズで、32 ビット環境ではメモリにロードできません)
私は C/C++ の経験は豊富ですが、C# はまだ経験がありません。ラッパーやヒントを手伝ってくれる人はいますか?
注: TIFF でピラミッド平面 (マルチ解像度) にアクセスするページと、一度に読み込まずに画像のさまざまな部分にすばやくアクセスできる 256x256 のタイルが必要です。
[編集] LibTIFF.NETソリューションは、私にとって最も実用的であると思われました。私は現在、それを製品開発に統合しています。これにより、管理されたメモリに出入りすることによる多くの頭痛の種がおそらく解消されます。「コールバック」機能はまだ試していませんが、.net の方法でうまく解決されているようです。stackoverflow のヘルプに感謝します [/編集]
tiff - 大きな 1 ビット tiff を 8 ビット グレースケール / 24 ビットにダウンスケール
2000 dpi の 100000x100000 1 ビット (K チャネル) tiff があり、これを 200 dpi にダウンスケールしたいとします。結果の画像は 10000x10000 画像になります。これは、1 ビット イメージの 10 ビットごとに、新しいイメージの 1 ピクセルに対応するということですか? ちなみに、私はlibtiffを使っていて、tiffreadscanlineで1bit tiffを読んでいます。ありがとう!
c# - C# で libtiff を使用して、ある TIFF 形式から別の形式に変換する
WPF/C# では処理できない JPEG 形式を使用した TIFF がありTiffBitmapDecoder
ます。クライアントはファイル形式を使用し、現在の C++ および Java コードがそれを処理します。
TiffBitmapDecoder
これを、または標準を使用して表示できる形式に変換する必要がありますBitmapImage
。libtiff の C# バージョンが進むべき道のようですが、コードを変換する運がありません。
これが私の試みです-私はいつも破損したファイルで終わります。
c++ - 書き込むTIFFファイルに「ExtraSamples」タグをつけようとするとエラーになる
画像を取得して TIFF ファイルに書き込むプログラムがあります。イメージは、グレー スケール (8 ビット)、アルファ チャネル付きグレー スケール (16 ビット)、RGB (24 ビット)、または ARGB (32 ビット) のいずれかです。アルファ チャンネルなしで画像を書き出すのに問題はありませんが、アルファ付きの画像の場合、余分なサンプル タグを設定しようとすると、TIFFSetErrorHandler によって設定された TIFF エラー処理ルーチンに送られます。渡されるメッセージは<filename>: Bad value 1 for "ExtraSamples"
、_TIFFVSetField モジュールにあります。以下のサンプルコード:
私が見る限り、タグはファイルに書き込まれません。幸いなことに、GIMP はまだ追加チャンネルがアルファ版であることを認識していますが、これらの TIFF を読み取る必要のある他のプログラムはそれほど寛大ではありません。TIFFTAG_EXTRASAMPLES の前に設定する必要があるタグがありませんか? そこに必要な他のタグがありませんか? どんな助けでも大歓迎です。
c++ - Mac で Libtiff を使用して TIFF ファイルを書き込めない
TIFFWriteScanline は Windows と Linux では機能しますが、Mac では失敗します
更新された質問:
Mac 10.6.4 の c++ で TIFF ファイルを読み書きするために libtiff3.9.4 を使用しています。私のプロジェクトは移植できるように書かれており、Windows 32 ビットと Ubuntu 64 ビットの両方で問題なく動作します。しかし、Mac では、Libtiff 関数 TIFFWriteScanline は常に失敗します (!= 1 を返します)。TIFF ファイルが作成されますが、内容がありません。LZW 圧縮イメージを読み取ることはできますが、書き込むことができません。さらに、このプログラムは Windows と Linux の CCITT Group4 イメージでも機能しますが、Mac ではスキャンラインの読み取りに失敗します。
libtiff3.8.2 と libtiff4.0.0beta6 の両方を試しましたが、うまくいきませんでした。
libtiff が Linux で正常に動作しているのに、Mac でスキャンラインを書き込まない理由はありますか?
コード:
tiff - 結果ファイルと結果ファイルをループでマージする tiffcp.exe
コマンド ラインから GNUWin32 tiffcp.exe を使用して、いくつかの tiff イメージ ファイルを取得し、それらを 1 つの tiff イメージ ファイルにマージする Web アプリを構築しています。
私が行っていた方法は、ファイル リストをループしてファイル名の文字列を作成し、1 つの変数にマージすることでした。
strfileList = "c:folder\folder\folder\aased98-def-wsdeff-434fsdsd-dvv.tif c:folder\folder\folder\aased98-def-wsdeff-434fsdsd-axs.tif c:folder\folder\folder\aased98 -def-wsdeff-434fsdsd-dxzs.tif"
次に、コマンドラインに次のように書き込みます。
tiffcp.exe strFileList results.tif
ファイル名は guid であるため、パスはかなり長く、短縮することはできません。したがって、これらのドキュメントが大量にある場合 (20 ファイル以上)、文字列変数の長さが Windows コマンド ラインの制限を超え、マージが失敗します。
このプロセスはファイルをマージするだけなので、次に考えたのは、ファイル名を文字列に書き込む代わりに、一度に 1 つのファイルをマージすることでした。したがって、ループが最初に実行されるのは、次のタイプのコードです。
tiffcp.exe file1.tif results.tif
その結果、完璧な 476k の tif ファイルが作成されます。ただし、ループの次の繰り返しでは、2 番目のファイルと最初の「結果」tif ファイルの内容をマージする必要があります。だから私はこれを行います:
tiffcp.exe results.tif file2.tiff results.tif
結果は毎回空白の 1K tiff ファイルですか?
私が見つけることができるtiffcp.exeのすべての例はfile1.tif file2.tif results.tifと言いますが、結果ファイルを使用してそれ自体に書き戻すものはありませんか?
これを行う方法に関する提案はありますか?
c++ - TIFF 画像のピクセルあたりのビット数の検出
LibTiff を使用してモノクロ tiff 画像を処理すると、「サンプルあたりのビット数」パラメーター: TIFFTAG_BITSPERSAMPLE を読み取ることができます。16 を返す場合、そのようなイメージの実際の「ピクセルあたりのビット数」の値は 9 から 16 までの任意の値である可能性があり、ほとんどの場合、これは 10、12、14、または 16 です。この値を保持する tiff イメージ タグはありますか?