- 題名: bmpファイルからtgaファイルを作成
- 日時: 2012/05/25 15:13:39
- ID: 30478
- この記事の返信元:
- (なし)
- この記事への返信:
- [30479] 【報告】この投稿はマルチポストです2012/05/25 16:21:49
- [30481] Re[1]: bmpファイルからtgaファイルを作成2012/05/25 19:24:46
- ツリーを表示
■No30484に返信(tanakaさんの記事)
> αチャンネルを持つ24bit無圧縮ファイルであれば
αチャンネルを持つ TGA であれば、ARGB の4色で32bitでは無いでしょうか。
(α=8bit、赤=8bit、緑=8bit、青=8bit)
http://www.openspc2.org/format/TGA/index.html
http://opengl.wiki.mface.jp/s/TGA%E7%94%BB%E5%83%8F%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF
> 一番良い方法があれば、ご教示していただきたいです。
とりあえず、先に提示した方法は 3 案あります。
有償のコンポーネント(LEADTOOLS等)でTGAファイルを作成する使う方法と、
GDI+ API で透過させたてから NConvert を Shell 関数で呼び出してTGA化する方法、
そして、TGAのバイナリを自前で生成してファイル化する方法です。
なお、GDI+ API の場合はこのあたりを使う事になると思います。
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=14597&page=0
.NET であれば簡単なのですけれどね…。
Dim srcFile As String = "C:\temp\bmp24.bmp"
Dim tmpFile As String = "C:\temp\bmp32.bmp"
Dim dstFile As String = "C:\temp\result.tga"
Using bmp As New Bitmap(srcFile)
bmp.MakeTransparent(Color.Black) '黒(R=0,G=0,B=0)を透過させる
bmp.Save(tmpFile, Imaging.ImageFormat.Bmp) 'BMP(32bit)として保存
Dim p As Process = Process.Start( _
"C:\tools\XnView\nconvert.exe", _
String.Format("-overwrite -out tga -o {1} {0}", _
tmpFile, dstFile)) 'NConvert で TGA 化
p.WaitForExit() '変換完了まで待機
System.IO.File.Delete(tmpFile) '中間ファイルを削除
End Using
どういった方法が「一番良い」のかは、御自身で判断していただくしか無いのですが
個人利用の場合は、費用のかさむ有償製品案は除外されるでしょうね。
業務利用なら、開発工数よりも安価に済めば有償製品の導入もアリでしょうけれども。
(なお、NConvert は商用目的では利用できないのでご注意ください)
> 作成されたBMP黒色の部分を透過100%
もしもVB6からGDI+で特定色を透過させるのであれば、透明のキャンパスに対し
GdipSetImageAttributesColorKeys で黒を透過色指定した Attributes と共に
GdipDrawImagePointsRectI を呼び出せば良さそうです。
http://msdn.microsoft.com/en-us/library/ms534042.aspx
(.NET でいえば、ImageAttributes.SetColorKey + Graphics.DrawImage に相当)
■No30486に返信(kikuさんの記事)
> BMPからGIFに変換し、GIFからTGAへ変換すればできそうですね。
GIFはインデックスカラーであり、最大で8ビット(256色)までしか使えません。
(BMP や PNG ならば、R,G,B,A の 32bitカラーを保有させられますが)
なので nconvert の対応度がどうであれ、GIFを経由させるのであれば
元のBMPの色数もそれに準じる必要があります。
GIF経由にした場合、元のBMPの色数によっては減色処理が必要となります。
# 色数に関しては、複数フレームのアニメーションGIFを用いることで
# 疑似的にフルカラーにはできますが、今回の目的では使えないでしょうし。
なお、GIF は透明色は持てますが、半透明色は作れないという制限もあります。
今回の透明度は100%と0%の二択らしいので、この点はクリアできそうですけれどね。
分類:[.NET]
bmpファイルがあります。
これをαチャンネルを追加してtgaファイルにVB6のコードから
作成したいです。
参考となるHPや、方法を教えていただきたいです。
bmp上にある黒の映像を透過100%にしたいです。