System.Drawingを使用して透明な画像をどのように描画しますか?



How Do You Draw Transparent Image Using System



解決:

はい、ジェロームが述べたように、ビットマップオブジェクトを使用して透明なGIFを作成する方法はありません。くだらない!

とにかく、PNGを生成するようにコードを変更しましたが、すべて期待どおりに機能します。



PNGをOutputStreamに直接書き込むことができないため、私が行う必要があった小さな回避策が1つあります。 PNGをMemoryStreamに書き込んでから、それをOutputStreamに書き出す必要がありました。

これが私の実装の最終的なコードです:



Protected Sub Page_Load(ByVal sender As Object、ByVal e As System.EventArgs)_ Handles Me.Load ''応答ヘッダーを変更してJPEG画像を出力します。 Response.Clear()Response.ContentType = 'image / png' Dim width = 11 Dim height = width ''新しい32ビットビットマップイメージを作成するDimb = New Bitmap(width、height) '' Dimを描画するためのGrahpicsオブジェクトを作成するg = Graphics.FromImage(b) ''描画が終了したら、画像を透明にする色で塗りつぶします。 g.Clear(Color.Gray) ''円が描画される長方形を取得するDimrect = New Rectangle(0、0、width -1、height -1) '' Draw Circle Border Dim bPen = Pens.Black g.DrawPie (bPen、rect、0、365) ''円を塗りつぶす薄暗いcbrush = New SolidBrush(Color.Red)g.FillPie(cbrush、rect、0、365) ''クリーンアップg.Flush()g.Dispose() ''透明にするb.MakeTransparent(Color.Gray) '' PNGをメモリストリームに書き込み、次にOutputStreamに書き込むDim ms = New MemoryStream()b.Save(ms、Imaging.ImageFormat.Png)ms.WriteTo(Response.OutputStream) Response.Flush()Response.End()End Sub 

残念ながら、ビットマップオブジェクトを使用して透過的なGifを作成する簡単な方法はありません。 (このKB記事を参照してください)

または、使用しているコードで透過性をサポートするPNG形式を使用することもできます。


です 可能 、 しかし 簡単ではありません



プロジェクトで安全でないコードを使用できる場合は、ポインターを使用してカラーテーブルをリッピングし、透明度を機能させる方法がいくつかあります。

Bob Powellによるサンプルフォームアプリは、https://web.archive.org/web/20141227173018/http://bobpowell.net/giftransparency.aspxで入手できます。 Webハンドラーでこのメソッドのバリエーションを使用しましたが、正常に機能しているようです。

限られたカラーパレットのみを使用している場合は、カラーテーブルの処理を必要な色だけに減らすことができます(私がそれをどのように行ったかを正確に思い出せません...)。

そうは言っても、pngはかなり簡単です。