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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.01.2011, 20:39   #1
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию Накладывание png картинок

Собственно как можно накладывать PNG картинки друг на друга как бы "смешивать" их вот пытался делать так но последний png затирал другого

Код:
...

  const
  MaxPixelCountA = MaxInt div SizeOf(TRGBQuad);
  MaxPixelCount = MaxInt div SizeOf(TRGBTriple);
type
  PRGBArray = ^TRGBArray;
  TRGBArray = array[0..MaxPixelCount-1] of TRGBTriple;
  PRGBAArray = ^TRGBAArray;
  TRGBAArray = array[0..MaxPixelCountA-1] of TRGBQuad;

...

procedure BuildPNG2BMP(png:TPNGObject; bmp:tbitmap);
var iii,ii:integer;
    PNB:TPngObject; fff:PRGBAArray; aaa:pByteArray;
begin
  PNB:=TPngObject.Create;
  try

    PNB.Assign(png);
    pnb.CreateAlpha;
    bmp.Assign(pnb);
    bmp.PixelFormat:=pf32bit;

    for ii:=0 to bmp.Height-1 do begin
       fff:=bmp.ScanLine[ii];
       aaa:=pnb.AlphaScanline[ii];
       for iii:=0 to bmp.Width-1 do begin
         fff[iii].rgbReserved:=aaa[iii];
       end;
    end;

  finally
    PNB.free;
  end;
end;

procedure BuildBMP2PNG(bmp:Tbitmap; png:TPNGObject);
var iii,ii:integer; PNB:TPngObject; fff:PRGBAArray; aaa:pByteArray;
begin
  PNB:=TPngObject.Create;
  try

    PNB.Assign(bmp);
    pnb.CreateAlpha;
    for ii:=0 to bmp.Height-1 do begin
        fff:=bmp.ScanLine[ii];
        aaa:=pnb.AlphaScanline[ii];
        for iii:=0 to bmp.Width-1 do begin
          aaa[iii]:=fff[iii].rgbReserved;
        end;
    end;

    PNG.Assign(pnb);

  finally
    PNB.free;
  end;
end;

procedure Copy32to32_Bitmap(B_in:TBitmap; Bout:Tbitmap; x,y:integer);
var cy,cx:Integer;  
   RowOut,Row1,Row2,Row3,Row4: PRGBAArray;
begin
  if(Bout.Width<B_in.Width+x) then Bout.Width:=B_in.Width+x;
  if(Bout.Height<B_in.Height+y) then Bout.Height:=B_in.Height+y;
  for cy:=0 to B_in.Height-1 do begin
    Row1:=B_in.ScanLine[cy];
    RowOut:=Bout.ScanLine[cy+y];
    for cx:=0 to B_in.Width-1 do begin
       RowOut[cx+x]:=Row1[cx];
    end;
  end;
end;

procedure TForm1.sozdanie_kar(pngshka: TPNGObject);
var
bmp_in,bmp_out:Tbitmap;
png_kar:TPNGObject;
begin
  bmp_in:=TBitmap.Create;
  bmp_out:=TBitmap.Create;
    bmp_out.PixelFormat:=pf32bit;
    png_kar:=TPNGObject.Create;
kol:=kol+1;
kar:=Timage.Create(self);
kar.Parent:=form1;
kar.Width:=140;
kar.Height:=80;
if (kol mod 6)=0 then begin
po_top:=po_top+118;
po_left:=40;
end;
kar.Top:=po_top;
kar.Left:=po_left;
BuildPNG2BMP(image.Items.Items[6].PngImage,bmp_in);
Copy32to32_Bitmap(bmp_in,bmp_out,0,0);
BuildPNG2BMP(pngshka,bmp_in);
Copy32to32_Bitmap(bmp_in,bmp_out,0,0);
BuildBMP2PNG(bmp_out,png_kar); 
kar.Picture.Assign(png_kar);
kar.Name:='image_'+inttostr(kol);
freeandnil(bmp_in);
freeandnil(bmp_out);
freeandnil(png_kar);
po_left:=po_left+160;
end;
___________________________________ _______________

вот ещё нашёл но почему-то не работает и для чего оно нужно?

Код:
var
png:TPNGObject;
begin
png.Assign();
png.AssignTo();
end;
Воображение важнее, чем знания. (Albert Einstein)

Последний раз редактировалось dmitriegorovih; 05.01.2011 в 11:42.
dmitriegorovih вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PNG nXs Мультимедиа в Delphi 2 31.10.2010 12:53
PNG _-Re@l-_ Общие вопросы Delphi 8 15.07.2010 16:48
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38
*.png Killbrum Помощь студентам 3 30.08.2008 15:51
Png Witaliy Мультимедиа в Delphi 3 25.05.2008 23:10