1
我當前的代碼將一個小的Pbgra32位圖轉移到更大的Pbgra32位圖上。工作正常。我現在想要做的是讓那個較小的部分透明。爲此,在blit之前,我將較小的一個傳遞給應該編輯每個像素的方法,方法是在將0x7F寫入每個像素的A值時單獨保留RGB值。Alpha通道不能像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();
}
}