1
현재 코드가 작은 Pbgra32 비트 맵을 더 큰 Pbgra32 비트 맵에 blit'ing합니다. 잘 작동합니다. 제가 지금하고 싶은 것은 그 작은 부분을 부분적으로 투명하게 만드는 것입니다. 이렇게하기 전에 blit 전에 작은 픽셀을 각 픽셀의 A 값에 0x7F를 쓰는 동안 RGB 값만 남겨 두어 각 픽셀을 편집해야하는 메서드로 전달합니다.알파 채널이 WriteableBitmap에서 예상대로 작동하지 않습니다.
그러나 50 % 투명 이미지 대신 회색 사각형이 나타납니다. 내가 도대체 뭘 잘못하고있는 겁니까?
private void MakeTransparent(ref WriteableBitmap bmp)
{
int width = bmp.PixelWidth;
int height = bmp.PixelHeight;
int stride = bmp.BackBufferStride;
int bytesPerPixel = (bmp.Format.BitsPerPixel + 7)/8;
unsafe
{
bmp.Lock();
byte* pImgData = (byte*) bmp.BackBuffer;
int cRowStart = 0;
int cColStart = 0;
for (int row = 0; row < height; row++)
{
cColStart = cRowStart;
for (int col = 0; col < width; col++)
{
byte* bPixel = pImgData + cColStart;
UInt32* iPixel = (UInt32*) bPixel;
bPixel[3] = 0x7F;
cColStart += bytesPerPixel;
}
cRowStart += stride;
}
bmp.Unlock();
}
}