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

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

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

Ответить
tria
постоялец
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10
Контактная информация:

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

Сообщение tria »

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

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

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

Я заранее не знаю, в каком формате юзер будет открывать картинку. Пока что решение - все в *.bmp. Но линуксоиды будут явно против...
В общем, подскажите пож. кто-нить, как поступить.
SergKam
постоялец
Сообщения: 251
Зарегистрирован: 16.11.2005 20:31:11
Откуда: Украина,Харьков

Сообщение SergKam »

точно не знаю, но думаю
возможно у png нет понятия bitmap. он же запакован. возможно надо сначала преобразовать png както в TBitMap
qvit
незнакомец
Сообщения: 1
Зарегистрирован: 15.03.2011 20:55:44

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

Сообщение qvit »

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;
// Я думаю коментарии излишни, выложил может кому и пригодиться
Maxizar
постоялец
Сообщения: 385
Зарегистрирован: 20.03.2010 18:48:14

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

Сообщение Maxizar »

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;

Два способа, см закоментированные строки.
Ответить