Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


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

Вечер добрый, господа, программисты, возник вопрос: Имеется процедура которая назначает для определенного пикселя на битмапе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, 16:33   #2
Showy
Форумчанин
 
Аватар для Showy
 
Регистрация: 08.08.2007
Адрес: Цирк незнакомых гримас
Сообщений: 183
Репутация: 190
Подмигивание Ответ

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

Код:

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:21.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru