Глюк с Picture или не глюк?

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

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

Глюк с Picture или не глюк?

Сообщение tria » 21.12.2006 14:27:50

прям по Шекспиру :)
Загружаю картинку из файла:
Picture.LoadFromFile('FileName');
файл в формате *.png
Далее сохраняю в поток:

stm:=TMemoryStream.Create;
Picture.BitMap.SaveToStream(stm);
Вылетает с ошибкой (что-то там про неправильный 1-й пиксел).

Если открывать *.bmp и сохранять также, то проблем нет.

Я заранее не знаю, в каком формате юзер будет открывать картинку. Пока что решение - все в *.bmp. Но линуксоиды будут явно против...
В общем, подскажите пож. кто-нить, как поступить.
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение SergKam » 22.12.2006 11:04:10

точно не знаю, но думаю
возможно у png нет понятия bitmap. он же запакован. возможно надо сначала преобразовать png както в TBitMap
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Re: Глюк с Picture или не глюк?

Сообщение qvit » 15.03.2011 22:17:03

var
GUIForm: TGUIForm;
MainBitmap:TPicture;

implementation

{ TGUIForm }


procedure TGUIForm.FormCreate(Sender: TObject);
begin
MainBitmap := TPicture.Create;
try
MainBitmap.PNG.LoadFromFile('OwnerAvtoRunSkin.png');
finally
end;
end;

procedure TGUIForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
MainBitmap.Free;
end;

procedure TGUIForm.FormPaint(Sender: TObject);
begin
Canvas.Draw(0,0,MainBitmap.Bitmap);
end;
// Я думаю коментарии излишни, выложил может кому и пригодиться
qvit
незнакомец
 
Сообщения: 1
Зарегистрирован: 15.03.2011 21:55:44

Re: Глюк с Picture или не глюк?

Сообщение Maxizar » 15.03.2011 22:59:45

qvit - если не сложно, добавляйте код в тэги [Сode], Заранее спасибо.
2- tria, если мой вариант вас устроит, не забываем переименовать тему, поставив, в конце [Решено]
Мой вариант, решения проблемы:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var P:TPicture;
    stm:TMemoryStream;
begin
   P:=TPicture.Create;
   P.LoadFromFile('C:\General.png');

   stm:=TMemoryStream.Create;
   P.SaveToStream(stm);

   //P.PNG.SaveToStream(stm);
   stm.SaveToFile('C:\General2.png');
   stm.Free;

   P.Free;
end;

Два способа, см закоментированные строки.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14


Вернуться в Lazarus

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30

Рейтинг@Mail.ru