JPG и PNG в Bitmap

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

JPG и PNG в Bitmap

Сообщение CynicRus » 31.07.2012 09:31:29

Собственно - как реализовать сабж? Я пробовал следующим способом:
Код: Выделить всё
function JpegToBitmap(jpeg: string):TBitmap;
var
jpg:TJpegImage;
bmp:TBitmap;
begin
   bmp := TBitmap.Create;
   jpg:=TJpegImage.Create;
   try
   jpg.LoadFromFile(jpeg);
   Bmp.Height      := jpg.Height;
   Bmp.Width       := jpg.Width;
   Bmp.PixelFormat := pf24bit;
   Bmp.Canvas.Draw(0, 0, jpg);
   bmp.Assign(jpg);
   result:=bmp;
   finally
     jpg.Free;
     bmp.Free;
   end;
end;
function PngToBitmap(png: string):TBitmap;
var
  bmp: TBitmap;
  pic: TPortableNetworkGraphic;
begin
   bmp := TBitmap.Create;
   try
   pic.LoadFromFile(png);
   bmp.Assign(pic);
   result:=bmp;
   finally
     bmp.Free;
   end;
end;                   
но собственно потерпел фиаско. Получаю ошибку где-то в недрах picture.inc.
Win 7 + Lazarus 0.9.30.4 + fpc 2.6.0
CynicRus
постоялец
 
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Re: JPG и PNG в Bitmap

Сообщение Timid » 31.07.2012 15:37:45

Как, интересно, Вы собирались отдать битмап (result:=bmp) после того как сделали ему Free? Операция присвоения для объектов не создает копию объектов, а только передает указатели.
Может попробовать как-то так:
Код: Выделить всё
begin
  ... (создаем и загружаем jpg) ...
  result:=TBitmap.Create;
  result.width:=320;
  result.height:=240;
  result.canvas.draw...
  ... (все остальное) ...
  jpg.free; // очистим память от jpeg'а, но не от битмапа, который в result'е !
end;
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: JPG и PNG в Bitmap

Сообщение iskander » 31.07.2012 16:08:43

Можно и проще:
Код: Выделить всё
  Result := TBitmap.Create;
  with TPicture.Create do
    try
      LoadFromFile(JPGFileName);//(PNGFileName)
      Result.Assign(Graphic);
    finally
      Free;
    end;
iskander
энтузиаст
 
Сообщения: 626
Зарегистрирован: 08.01.2012 18:43:34


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 242

Рейтинг@Mail.ru