2011-07-20 3 views
0

透明なセクションを持つ下部の画像と同じサイズの画像オーバーレイを作成しようとしています。私が抱えている問題は、オーバーレイショーの透明部分がキャンバス内で黒くなっているか、または最初は透明に設定されていないことです。 オーバーレイはビューモデルのプロパティである:ここでWPFでイメージオーバーレイ?

this.Logger.Trace("overlay get start"); 
Bitmap bmp = new Bitmap(this.imageWidth, this.imageHeight, PixelFormat.Format8bppIndexed); 


System.Drawing.Imaging.ColorPalette myPalette = bmp.Palette; 
for (int x = 0; x < 256; x++) 
{ 
    myPalette.Entries[x] = System.Drawing.Color.FromArgb(x, x, x); 
} 
bmp.Palette = myPalette; 

// Create a BitmapData and Lock all pixels to be written 
BitmapData bmpData = bmp.LockBits(
        new Rectangle(0, 0, bmp.Width, bmp.Height), 
        ImageLockMode.WriteOnly, 
        bmp.PixelFormat); 

for (int iRow = 0; iRow < this.imageHeight; iRow++) 
{ 
    Marshal.Copy(this.overlay, (iRow * this.imageWidth), bmpData.Scan0 + (iRow * bmpData.Stride), this.imageWidth); 
} 

// Marshal.Copy(this._overlay, 0, bmpData.Scan0, this.imageWidth * this.imageHeight);//this._overlay.Length); 

// Unlock the pixels 
bmp.UnlockBits(bmpData); 

bmp.MakeTransparent(Color.FromArgb(255, 255, 255)); 
bmp.MakeTransparent(bmp.GetPixel(0, 0)); 
bmp.MakeTransparent(bmp.GetPixel(1, 1)); 

this.Logger.Trace("overlay get end"); 

MemoryStream ms = new MemoryStream(); 
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp); 
BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage(); 

bImg.BeginInit(); 
bImg.StreamSource = new MemoryStream(ms.ToArray()); 
bImg.CreateOptions = BitmapCreateOptions.PreservePixelFormat; 
bImg.CacheOption = BitmapCacheOption.Default; 
bImg.EndInit(); 

ms.Close(); 

imagesRec++; //for debug purposes 

return bImg; 

はXAMLです:

<StackPanel Grid.Column="1" > 
    <Canvas DragDrop:DragDropManager.DropTargetAdvisor="{StaticResource targetAdvisor1}" Name="CanvasObj" > 
     <Image x:Name="CameraImage" Source="{Binding CameraImage}" VerticalAlignment="Top" HorizontalAlignment="Center" ></Image> 
     <Image x:Name="Overlay" Source="{Binding Overlay}" VerticalAlignment="Top" HorizontalAlignment="Center" ></Image> 
    </Canvas> 
</StackPanel> 
+5

透過画像が設定されているPNG画像を使用するだけではどうですか? –

答えて

2

すべてでそれをする必要はありません。アルファレイヤーが既に埋め込まれているPNG形式の画像を使用してください。残りは「うまくいく」でしょう。

+0

ええ、それも私が尋ねたものだ –

+0

ええ、私はそれを見た(あなたはそれを答えにしておくべきだった!:)。それは本当に意味をなさない唯一のものです...なぜ、誰が何度も多くのフープを飛び越えるのかどうかはわかりません。 –

関連する問題