掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
imageにgif画像を使用するには? (ID:5819)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
GIFのLZW圧縮ファイルについては非LZW圧縮・展開法は可能です。 それはLZWの特許要件である辞書が 展開後の本体と全く同一であるところに起因します。 LZWより高速になると思うので特許切れは近いですが あえて今「非LZW・LZW互換」で行くのもよいのではないかと思います。 しかしそれより安易で海外でも定着している方法として OLELoadPictureを使う方法があります。 少なくともこの方法を使っているサイトは数年前からあり アメリカなどでもUNYSYSと正非は別としても法廷論争も存在しないようです。 要はWindowsの価格に含まれているということです。 海外ではこれがGIF表示の常道になっているようですが日本では あまり知られていないようです XPだと別のAPIもあるそうですが このAPIでWMF、GIF、JPEG、BMPが展開できるので 単に画像をロードする場合IJGなどの100kbyte強のオーバーヘッドをさけることができます。 関連した関数としてOLEloadpictureFileもあります。 基本的にOleLoadpictureとTbitmapあたりの組み合わせがお勧めです。 コードは短くてすみますがgroballockとかインターフェース型(Istream,Ipicture)など使ったことのない人は ちょっと面食らうかもしれません。 あとサイズ指定時Ipictureの返すサイズの単位はドットでないのも注意が必要です。 iPicture.getheight(height); height1:=Multidiv(height,getdevicecaps(GetDC(0),LOGPIXELSY),2540)); みたいな感じ ActiveXをインクルードしますが IIDなど自前で書かないといけないようです。 使うのはOleauto.dllなのですが以前はdelphiの宣言文が違っていたので苦労した覚えがあります。 詳細はOLEPictureを探索すればでてくると思います。 delphiの場合Ipicture.renderでTbitmapDCなどを渡して描画します。 GIFの場合透明処理はしてくれるのですが その後透明色が何かわからなくなっちゃうので フォーマット分析しない場合は 事前に絶対に使っていない色でぬり潰してから24bitモードにして その色をTbitmapの透明色にするなどするとうまく使えます。 この方法はWMFのBMP化にも使いやすいので重宝します。 以前フォーマットの解析部に既存のルーチンを使い レンダー部だけこちらを使う方法を取っているサイトを海外で見たことがあります。 この関数で透明色を換算する二度塗り法にについて丹念に解説しているサイトを見たことがありますが 素直にファイルを解析して存在しない色を使うか透明色で塗りつぶすほうが速いです。 あともう一つMCIでも現状GIFとJPEGには対応しているので アニメーションGIFの表示だけしたい場合はこちらを使うのも手です。 詳しく知りたい人はとにかくGoogleなどで「OleloadPicture」で探索することでは無いかと思います。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.