Я возился с этим большую часть ночи, так что, может быть, кто-нибудь из вас поможет мне.
Я обнаружил, что GDI+ DrawImage в C# слишком медленный для того, что я пытаюсь отобразить, и, судя по форумам, это то же самое и для других людей.
Я решил попробовать использовать AlphaBlend или BitBlt из API Win32 для повышения производительности. В любом случае, мои изображения отображаются нормально, за исключением одной маленькой детали: независимо от того, какой формат изображения я использую, я не могу заставить белый фон исчезнуть из моей (прозрачной) графики.
До сих пор я пробовал форматы BMP и PNG и убедился, что они загружаются как изображения 32bppargb в С#.
Вот звонок, который я делаю:
// 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 говорит, что они должны быть.
Кто-нибудь из вас, ребята, знает хорошее решение этой проблемы или знает лучший (но все же быстрый) способ сделать это?