2009-05-01 16 views
1

入力イメージを取得してそこからマスクを生成するページを作成しようとしています。入力は、透明な背景のインデックス付きPNGになります。元の画像が不透明であったところでは、元の画像が透明かつ透明であった場合、得られる画像は黒色になる。ASP.netの反転イメージの透明度

私はasp.netでいくつかの非常に基本的な画像操作を行ってきましたが、私はどのように進めるのかは分かりません。私はピクセルごとに行くよりも速い解決策があることを期待しています。

誰かが正しい方向で私を指すことができるなら、私は本当にそれを感謝します。

答えて

0

[OK]を私は、変換を使用して実用的なソリューションを持っています。正直言って私はカラーマトリックスで何をやっているのか100%理解していないので、これをやったやり方は最適ではないかもしれません。他の誰かが同じ問題を抱えている場合は、以下のコードを貼り付けてください。

基本的に、トランスフォーメーションによって透明ピクセルが黒くなり、色付きピクセルが白くなります。私はその後、白いピクセルにMakeTransparentを使用しました。これを一歩一歩進める方法があるはずですが、残念ながら今日は私を超えています

ありがとうもう一度chris-私は何時間も働いていたテクニックを探していましたが、変換のタイプ。

<%@ page language="vb" contenttype="image/png" %> 

<%@ Import Namespace="System.IO" %> 
<%@ import namespace="system.drawing" %> 
<%@ import namespace="system.drawing.imaging" %> 
<%@ import namespace="system.drawing.drawing2d" %> 

<script runat="server"> 
    Sub Page_Load() 
     Dim tmpImage As Bitmap = Bitmap.FromFile(Server.MapPath("test.png")) 
     Dim input As Bitmap = New Bitmap(tmpImage.Width, tmpImage.Height, PixelFormat.Format32bppArgb) 


     Dim trans As New ColorMatrix(New Single()() _ 
         {New Single() {0, 1, 1, 1, 0}, _ 
         New Single() {1, 0, 1, 1, 0}, _ 
         New Single() {1, 1, 0, 1, 0}, _ 
         New Single() {1, 1, 1, 1, 0}, _ 
         New Single() {0, 0, 0,255, 1}}) 


     Dim attr As New ImageAttributes 
     Dim rc As New Rectangle(0, 0, input.Width, input.Height) 
     Dim out As New memorystream 
     Dim g As Graphics = Graphics.FromImage(input) 
     g.Clear(Color.Transparent) 

     attr.SetColorMatrix(trans, System.Drawing.Imaging.ColorMatrixFlag.Default, System.Drawing.Imaging.ColorAdjustType.Bitmap)  
     g.DrawImage(tmpImage, rc, 0, 0, input.Width, input.Height, GraphicsUnit.Pixel, attr) 
     input.makeTransparent(System.Drawing.Color.White) 
     input.Save(out, ImageFormat.Png) 
     g.Dispose() 
     input.Dispose() 
     tmpImage.Dispose() 
     out.WriteTo(Response.OutputStream) 
    End Sub 

</script> 
関連する問題