Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   AlphaBlend con Imagenes (https://www.clubdelphi.com/foros/showthread.php?t=68618)

antonio302050 25-06-2010 01:44:47

AlphaBlend con Imagenes
 
hola a todos , bueno . Soy nuevo en esto de programar hasta ahora aprendi a programar lo basico en delphiy ahora estoy entrando al mundo de C++ builder ,Yo quisiera q me ayuden a pasar este codigo de Delphi a C++ builder
Es un codigo de tranparencias entre 2 imagenes , donde yo tengo 2 imagenes en formulario q contienen las imagenes q voy ocupar(Image1,Image2),y en el canvas de Image3 pinto la imagen combinada entre Image1 y Image2 , una Semitransparencia entre 2 imagenes,
En el edit1->Text se inserta el porcentaje de transparencia.
mi problema es q nose como usar el procedimiento Alphablend q creo q pertenece a la API de Windows

Código Delphi [-]
unit UFAlphaBlend;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, jpeg;
type
  TForm1 = class(TForm)
    Button1: TButton;
    Image2: TImage;  
    Image1: TImage;
    Image3: TImage;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
  xBlend : BLENDFUNCTION;
  ini,iAncho,iAlto,alpha:Integer;
  aBitmap1,aBitmap2,aBitmap3:TBitmap;
Begin
    iAncho := Image1.Width;
    iAlto := Image1.Height;
    aBitmap1 := TBitmap.Create;
    aBitmap2 := TBitmap.Create;
    aBitmap3 := Tbitmap.Create;
    aBitmap1.Assign(Image1.Picture.Graphic);
    aBitmap2.Assign(Image2.Picture.Graphic);
    aBitmap3.Width := iAncho;
    aBitmap3.Height :=iAlto;
  ini := windows.GetTickCount;
  aBitmap3.Assign(aBitmap1);
  xBlend.BlendOp := windows.AC_SRC_OVER;
  xBlend.BlendFlags := 0;
  Alpha:=StrToInt(Edit1.Text);
  xBlend.SourceConstantAlpha := Alpha;
  xBlend.AlphaFormat := 0;
  Windows.AlphaBlend(aBitmap3.Canvas.Handle,0,0,iAncho,iAlto,aBitmap2.Canvas.Handle,0,0,iAncho,iAlto,x  Blend);
  Image3.Canvas.Draw(0,0,aBitmap3);
  Caption := inttostr(getTickCount - ini)+' milisegundos por frame ' + inttostr(Alpha);
end;
end.

escafandra 25-06-2010 19:27:00

Un proyecto con tres TImage un Edit y un botón.
Los TImage deben tener una imagen cargada previa.

Código:

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"


// IMPORTANTE:
// Para poder usar la función AlphaBlend del API tenemos que añadir
// msimg32.lib al proyecto:
// Añadir "$(BCB)\lib\PSDK" al library path en opciones de proyecto.

#pragma link "msimg32.lib"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  BLENDFUNCTION xBlend;
  int ini,iAncho,iAlto,Alpha;
  Graphics::TBitmap *aBitmap1, *aBitmap2, *aBitmap3;

  iAncho = Image1->Width;
  iAlto = Image1->Height;
  aBitmap1 = new Graphics::TBitmap;
  aBitmap2 = new Graphics::TBitmap;
  aBitmap3 = new Graphics::TBitmap;
  aBitmap1->Assign(Image1->Picture->Graphic);
  aBitmap2->Assign(Image2->Picture->Graphic);
  aBitmap3->Width = iAncho;
  aBitmap3->Height =iAlto;
  ini = GetTickCount();
  aBitmap3->Assign(aBitmap1);
  xBlend.BlendOp = AC_SRC_OVER;
  xBlend.BlendFlags = 0;
  Alpha = StrToInt(Edit1->Text);
  xBlend.SourceConstantAlpha = Alpha;
  xBlend.AlphaFormat = 0;
  AlphaBlend(aBitmap3->Canvas->Handle,0,0,iAncho,iAlto,aBitmap2->Canvas->Handle,0,0,iAncho,iAlto,xBlend);
  Image3->Canvas->Draw(0,0,aBitmap3);
  Caption = IntToStr(GetTickCount() - ini)+" milisegundos por frame " + IntToStr(Alpha);
}
//---------------------------------------------------------------------------

Saludos.

antonio302050 30-06-2010 02:17:33

Gracias por la ayuda
 
Gracias por responder tan rapido scafandra ,
yo no sabia q se tenia que de añadir esa libreria
voy a probar tu codigo, despues t aviso si me corre

antonio302050 19-07-2010 21:57:23

Scafandra una pregunta
/ Para poder usar la función AlphaBlend del API tenemos que añadir
// msimg32.lib al proyecto:

Disculpa mi ignorancia
Como puedo añadir msimg32.lib a mi proyecto

escafandra 01-08-2010 15:14:14

Cita:

Empezado por antonio302050 (Mensaje 370853)
Scafandra una pregunta
/ Para poder usar la función AlphaBlend del API tenemos que añadir
// msimg32.lib al proyecto:

Disculpa mi ignorancia
Como puedo añadir msimg32.lib a mi proyecto

Si prefieres hacerlo así...

Saludos.


La franja horaria es GMT +2. Ahora son las 07:20:45.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi