Последние записи
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
- Сравнение языков на массивах. Часть 2
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
19th
Ноя
Наложить BMP на BMP.
Posted by bullvinkle under Пост-обзор
Нужно наложить один BMP на другой с прозрачностью. Допустим в первом BMP скрин рабочего стола, а во втором просто белый фон. После наложения получается как бы осветленный на 50% скрин.
Я погуглил, нашел:
procedure VerbindenBmp;
var
BmpConverte1, BmpConverte2: TBitMap;
Blend: TBlendFunction;
begin
BmpConverte1 := TBitMap.Create;
BmpConverte1.LoadFromFile('2.bmp');
BmpConverte2 := TBitMap.Create;
BmpConverte2.LoadFromFile('1.bmp');
Blend.SourceConstantAlpha := 130;
if Windows.AlphaBlend(BmpConverte1.Canvas.Handle, 0, 0, BmpConverte1.Width,
BmpConverte1.Height, BmpConverte2.Canvas.Handle, 0, 0, BmpConverte2.Width,
BmpConverte2.Height, Blend) then Form1.Image1.Canvas.Draw(0, 0, BmpConverte1);
BmpConverte1.Free;
BmpConverte2.Free;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
VerbindenBmp;
end;
Работает, но если сделать так:
procedure TForm1.Button1Click(Sender: TObject);
begin
VerbindenBmp;
end;
То, не работает!. Мне не нужно при FormPaint, нужно при Button1Click…
==================================================================================
Как смешать две картинки
procedure TacSpeedButton.Morphing(Bm1, Bm2: TBitmap; Progress: Integer);
var
dstPixel, srcPixel: PRGBQuad;
Weight: Integer;
I: Integer;
begin
if (Assigned(Bm1) and Assigned(Bm2)) then
begin
Bm1.PixelFormat := pf32bit;
Bm2.PixelFormat := pf32bit;
srcPixel := Bm2.ScanLine[Bm2.Height – 1];
dstPixel := Bm1.ScanLine[Bm1.Height – 1];
Weight := MulDiv(256, Progress, 100);
for I := (Bm1.Width * Bm1.Height) – 1 downto 0 do
begin
with dstPixel^ do
begin
Inc(rgbRed, (Weight * (srcPixel^.rgbRed – rgbRed)) shr 8);
Inc(rgbGreen, (Weight * (srcPixel^.rgbGreen – rgbGreen)) shr 8);
Inc(rgbBlue, (Weight * (srcPixel^.rgbBlue – rgbBlue)) shr 8);
end;
Inc(srcPixel);
Inc(dstPixel);
end;
end;
end;
http://www.programmersclub.ru/Как-смешать-две-картинки/
Вот еще вариант :
procedure MixBMP(BM1, BM2: TBitMap; var BM: TBitMap);
var
I, J: Integer;
MinW, MinH: Integer;
begin
BM := TBitMap.Create;
if BM1.Width < BM2.Width then
MinW := BM1.Width
else
MinW := BM2.Width;
if BM1.Height < BM2.Height then
MinH := BM1.Height
else
MinH := BM2.Height;
BM.Width := MinW;
BM.Height := MinH;
for I := 0 to MinW do
for J := 0 to MinH do
if (Odd(I) and Odd(J)) or ((not (Odd(I))) and (not (Odd(J)))) then
BM.Canvas.Pixels[I, J] := BM1.Canvas.Pixels[I, J]
else
BM.Canvas.Pixels[I, J] := BM2.Canvas.Pixels[I, J];
end;
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)