別の画像からのGdiplusマスク画像
-
06-07-2019 - |
質問
別の画像のアルファを使用して画像のアルファを操作する方法はありますか?
画像があり、左から不透明、右から完全に透明なアルファを変更したい場合、現在LinearGradientBrushで別の画像を描画し、ピクセルごとにループすることで元の画像のアルファを2番目の画像から設定しますGdiplusの方法、いくつかの画像マスク、または2つの画像のアルファのブレンド?
結論:GDI +には2つの画像をブレンドする方法はないように見えますが、ピクセルを反復して手動で行う方法しかありません。
解決
このピクセルごとに行う必要があるという点で、あなたは正しいと思います。さらに「純粋」を検索しました。それを行う方法ですが、これは私が終わったものです:
public enum ChannelARGB
{
Blue = 0,
Green = 1,
Red = 2,
Alpha = 3
}
public static void transferOneARGBChannelFromOneBitmapToAnother(
Bitmap source,
Bitmap dest,
ChannelARGB sourceChannel,
ChannelARGB destChannel )
{
if ( source.Size!=dest.Size )
throw new ArgumentException();
Rectangle r = new Rectangle( Point.Empty, source.Size );
BitmapData bdSrc = source.LockBits( r, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb );
BitmapData bdDst = dest.LockBits( r, ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb );
unsafe
{
byte* bpSrc = (byte*)bdSrc.Scan0.ToPointer();
byte* bpDst = (byte*)bdDst.Scan0.ToPointer();
bpSrc += (int)sourceChannel;
bpDst += (int)destChannel;
for ( int i = r.Height * r.Width; i > 0; i-- )
{
*bpDst = *bpSrc;
bpSrc += 4;
bpDst += 4;
}
}
source.UnlockBits( bdSrc );
dest.UnlockBits( bdDst );
}
所属していません StackOverflow