Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2008, 23:55   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию Альфа-канал

Вечер добрый, господа, программисты, возник вопрос: Имеется процедура которая назначает для определенного пикселя на битмапе32 определенный альфа-канал (устанавливает прозрачность пикселя). Как сделать чтобы битмап32 с установленными прозрачностями, перевести в черно белый и отобразить на нем прозрачные пикселы серым цветом.

procedure Tform_Test. FormCreate(Sender: TObject);
begin
DrawMode := dmBlend;
CombineMode := cmBlend;
end;
procedure Tform_Test. btn_PixelClick(Sender: TObject);
procedure SetPixelAlpha(X, Y: Integer; Alpha: Byte);
var
C: TColor32
begin
with TBitmapLayerEx(iv_FIMG.Layers[0]) do
begin
C := Bitmap.Pixel[X, Y];
TColor32Entry(C).A := Alpha;
Bitmap.Pixel[X, Y] := C;
end;
end;
var
i, j: Integer;
begin
for i := 0 to Width - 1 do
for j := 0 to Height - 1 do
SetPixelAlpha(i, j, trk_Fuzziness.Position);
ImageView.Invalidate;
end;
NeiL вне форума Ответить с цитированием
Старый 28.02.2008, 15:33   #2
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
Подмигивание Ответ

День добрый. Вот рабочий код. Всё работает отлично.

Код:
unit Unit1;

interface

uses
  Windows, Messages, Classes, Graphics, Forms,
  Dialogs, StdCtrls, Controls;



type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  type
  TRGBQ= array  [word] of TRGBQuad;
  TRGBT= array [word] of TRGBTriple;

var
  Form1: TForm1;
  abmp,bmp:TBitmap;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 abmp := TBitmap.Create;
 abmp.PixelFormat := pf32bit;

 //устанавливаешь альфа-какнал

 bmp := TBitmap.Create;
 bmp.PixelFormat := pf24bit;
 bmp.Width := abmp.Width;
 bmp.Height := abmp.Height;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 pa: ^TRGBQ;
 pb: ^TRGBT;
 i,j:integer;
 alpha:byte;
begin
for i := 0 to abmp.height -1 do
 begin
  pa := abmp.Scanline[i];
  pb := bmp.ScanLine[i];
  for j := 0 to abmp.Width-1 do
   begin
    alpha := pa[j].rgbReserved;
    pb[j].rgbtBlue := alpha;
    pb[j].rgbtGreen := alpha;
    pb[j].rgbtRed := alpha;
   end;
 end;
end;

end.
Until The End Of Time
Showy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отрисовка PNG с альфа-каналом на десктопе Whisper Помощь студентам 2 02.01.2008 19:24
GDI+ и альфа канал в Delphi for Win32 murtix Мультимедиа в Delphi 2 06.10.2007 00:09