Я ссорился с этим большую часть ночи, так что, возможно, один из вас может мне помочь.
Я обнаружил, что GDI + DrawImage
в C # слишком медленный для того, что я пытаюсь визуализировать, и, судя по форумам, он одинаков для других людей.
Я решил, что попробую использовать AlphaBlend
или BitBlt
из Win32 API для повышения производительности. В любом случае, мои изображения отображаются нормально, за исключением одной маленькой детали - независимо от того, какой формат изображения я использую, я не могу заставить белый фон исчезать из моей (прозрачной) графики.
До сих пор я пробовал форматы BMP и PNG и убедился, что они загружаются как изображения 32bppargb в C #.
Вот звонок, который я делаю:
// Draw the tile to the screen.
Win32GraphicsInterop.AlphaBlend(graphicsCanvas, destination.X, destination.Y, this.TileSize, this.TileSize,
this.imageGraphicsPointer, tile.UpperLeftCorner.X, tile.UpperLeftCorner.Y,
this.TileSize, this.TileSize,
new Win32GraphicsInterop.BLENDFUNCTION(Win32GraphicsInterop.AC_SRC_OVER, 0,
Convert.ToByte(opacity * 255),
Win32GraphicsInterop.AC_SRC_ALPHA));
Для записи, AC_SRC_OVER
- это 0x00
, а AC_SRC_ALPHA
- это 0x01
, что согласуется с тем, что MSDN говорит, что они должны быть.
Кто-нибудь из вас, ребята, имеет хорошее решение этой проблемы или знает лучший (но все же быстрый) способ, которым я могу это сделать?