我当前的代码是将一个小的 Pbgra32 位图粘贴到一个更大的 Pbgra32 位图上。工作正常。我现在想做的是使那个较小的部分透明。为此,在 blit 之前,我将较小的一个传递给一个方法,该方法应该编辑每个像素,方法是单独保留 RGB 值,同时将 0x7F 写入每个像素的 A 值。
然而,我得到的不是 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();
}
}