Я хочу нарисовать довольно сложные изображения с альфа-прозрачными прямоугольниками и альфа-прозрачными изображениями. There is GDI+ wrapper from Mitov, но, похоже, он не поддерживает 32-битные файлы BMP, и он пересказывает их, и документация ужасна. BMP быстрее, чем PNG, поэтому я хочу их использовать. There is SynGDI wrapper of GDI+, но он кажется очень простым, и для него нет документации. Существует также этот трюк для GDI:Как нарисовать прозрачность с альфа-прозрачностью в Delphi?
procedure DrawAlphaAPI(Source: TBitmap; Destination: TCanvas;
const X, Y: Integer; const Opacity: Byte = 255);
var BlendFunc: TBlendFunction;
begin
BlendFunc.BlendOp := AC_SRC_OVER;
BlendFunc.BlendFlags := 0;
BlendFunc.SourceConstantAlpha := Opacity;
if Source.PixelFormat = pf32bit then
BlendFunc.AlphaFormat := AC_SRC_ALPHA
else
BlendFunc.AlphaFormat := 0;
Windows.AlphaBlend(Destination.Handle, X, Y, Source.Width, Source.Height,
Source.Canvas.Handle, 0, 0, Source.Width, Source.Height, BlendFunc);
end;
Но когда я называю его Opacity = 255 она рисует 32-битные растровые изображения не правильно (что-то, что они являются полупрозрачными, где они должны быть полностью). Я не хочу использовать Scanline, чтобы сделать пикселы прозрачными, поскольку это будет слишком сложно, чтобы рисовать все прозрачные прямоугольники таким образом. Также я тонкий GDI + должен быть быстрее на современных компьютерах, верно?
Итак, вопрос: как рисовать альфа-прозрачный прямоугольник и растровое изображение легко (без тонны кода)?
Предпочитаемый Delphi: 7. У меня также есть 2005 и XE3, но поскольку 7 - демон скорости, я бы больше всего хотел, чтобы что-то работало с 7 до.
Если вы можете использовать [ 'это wrapper'] (http://www.bilsen.com/gdiplus/index.shtml), который поддерживает Delphi 2009, вы можете написать [' код как это'] (http://pastebin.com/fcjtHKen), который выглядит довольно сложно, но вам нужно знать, что вы можете изменить ['color adjustment'] (http://www.codeproject.com/Articles/3772/ColorMatrix-Basics-Simple-Image-Color-Adjustment) с этой цветовой матрицей и что я загружаю файл, который должен быть альфам, смешанным в этом коде (например, вы можете создать «GPBitmap» из переданного объекта «TBitmap»). – TLama
@TLama Спасибо, этот GDI + кажется лучшим до сих пор. Другие дрянные. Один из Progdigy не компилируется (7, ни 2005 или XE3), тот, который из Митова уничтожает изображения после их рисования, тот, что из Synopse является неполным. – Tom
FWIW: Я нашел [эти статьи] (http://itinerantdeveloper.blogspot.de/search/label/alpha%20transparency) довольно интересным. –