Lazarus 3.0 (2023.12.21.)
Letöltés

  • Oldal:
  • 1

TÉMA:

Válasz:bmp kép megjelenítés TImage-ben 2009 máj. 28 01:45 #343

  • lazly
  • lazly profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Nem éltem hiába!

Mielött a Tbitmap-be betöltöm a TMemoryStream-et, a pointert le kell nullázni, mert az elötte elvégzett byte-onkénti másolás miatt a stream végén áll.
Tehát betöltöttem a nagy semmit, HIBAÜZENET NINCS!

Így tökéletesen mükszik:

mstpic2.position:=0;
bmp2.LoadFromStream(mstpic2);
Imagebmp.Picture.Bitmap:=bmp2;

Jójcakát Mindenkinek!

Válasz:bmp kép megjelenítés TImage-ben 2009 máj. 27 23:12 #342

  • lazly
  • lazly profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Kedves Athomas!

Nekem is müködik, de:
- a Form bezárásakor hibaüzenettel;
- nem az inverz képet adja ki, nem is az eredetit, hanem valami mást ( másik képnél valószínüleg észre sem vettem volna, de annak a képnek az inverzét, amivel próbálkozom, már láttam elégszer), valószínüleg megváltozott a paletta ( 256 szürke árnyalat), vagy rosszul kezeli.

Még bogarászom a dolgot, ha jutok valamire, megírom.

Eddigi fáradozásodat köszönöm szépen.

Üdv: lazly

Válasz:bmp kép megjelenítés TImage-ben 2009 máj. 27 18:05 #341

  • Athomas
  • Athomas profilkép
  • Moderátor
  • Moderátor
  • Sör, virsli, Lazarus
  • Hozzászólások: 46
  • Köszönetek: 0
Hát lehet hogy nem a leg elegánsabb megoldás, de gondoltam megpróbálom. Ahelyett, hogy LoadFromStream-al betöltöttem volna mstpic-be mstpic2-t, egyszerűen értékül adtam.
mstpic:=mstpic2;
Működik.

Válasz:bmp kép megjelenítés TImage-ben 2009 máj. 27 14:40 #338

  • lazly
  • lazly profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Köszönöm a választ!

Sejthettem volna, hogy kevés infot adtam.
Ugyanugy jelenitek meg egy képet, ahogy irtad.

Ezzel semmi gond nincs:

bmp:=TBitmap.Create;
mstpic:=TMemorystream.Create;
mstpic.LoadFromFile(ifn);
bmp.LoadFromStream(mstpic);
imagebmp.picture.bitmap:=bmp;

A baj itt van:

var
pixbyte: Byte;
begin
bmp2:=TBitmap.Create;
mstpic2:=TMemorystream.Create;
mstpic2.LoadFromStream(mstpic);
mstpic.position:=bmpos;
mstpic2.position:=bmpos;
while mstpic.position<bmfsize do
begin
mstpic.read(pixbyte,1);
pixbyte:=255-pixbyte;
mstpic2.write(pixbyte,1);
end;
//mstpic2.SaveToFile('C:\tempimage.bmp');
//bmp2.LoadFromFile('C:\tempimage.bmp');
bmp2.LoadFromStream(mstpic2);
imagebmp.picture.bitmap:=bmp2;
end;

Itt bmfsize a fájlméret (stream mérete), bmpos a kép pixeladatok kezdöcime, aztán létrehozok egy inverz képet.
Az mstpic2 valószinüleg jó, hiszen ha kimentem fájlba és onnan visszatöltöm bmp2-be, akkor nincs gond.
Egy lényegi különbséget látok eddig, itt az mstpic2 streamet LoadFromStream-mel mstpic-böl, tehát másik streamböl, nem pedig fájlból másoltam.

Köszi, üdv.

Válasz:bmp kép megjelenítés TImage-ben 2009 máj. 27 13:43 #337

  • Athomas
  • Athomas profilkép
  • Moderátor
  • Moderátor
  • Sör, virsli, Lazarus
  • Hozzászólások: 46
  • Köszönetek: 0
Csináltam egy ilyet, és megy:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, ExtCtrls;

type

{ TForm1 }

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
mstpic2: TMemoryStream;
bmp2: Tbitmap;
Imagebmp: Timage;
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{ TForm1 }


procedure TForm1.Button1Click(Sender: TObject);
begin
mstpic2.LoadFromFile('d3.bmp');
bmp2.LoadFromStream(mstpic2);
Imagebmp.Picture.Bitmap:=bmp2;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
mstpic2:= TMemoryStream.Create;
Imagebmp:= TImage.Create(Form1);
Imagebmp.Parent:= Form1;
Imagebmp.Top:=30;
Imagebmp.Left:=30;
Imagebmp.Height:=50;
Imagebmp.Width:=50;
Imagebmp.Visible:=True;
bmp2:=TBitmap.Create;
end;

initialization
{$I unit1.lrs}

end.

bmp kép megjelenítés TImage-ben 2009 máj. 27 00:39 #336

  • lazly
  • lazly profilkép Témaindító
  • Új tag
  • Új tag
  • Hozzászólások: 6
  • Köszönetek: 0
Sziasztok!

Új vagyok itt, röviden bemutatkoznék:
55 múltam, hardverrel foglalkozom, szoftverrel hobbizok.

A gondom a következö:

Egy memóriastreamböl bitmapbe töltött képet szeretnék megjeleníteni.

mstpic2: TMemoryStream;
bmp2: Tbitmap;
Imagebmp: Timage;

Így megjelenik a kép:

bmp2:=TBitmap.Create;
mstpic2.SaveToFile('C:\tempimage.bmp');
bmp2.LoadFromFile('C:\tempimage.bmp');
Imagebmp.Picture.Bitmap:=bmp2;

Így nem jelenik meg, hibaüzenet nincs:

bmp2:=TBitmap.Create;
bmp2.LoadFromStream(mstpic2);
Imagebmp.Picture.Bitmap:=bmp2;

Segítségeteket elöre is köszönöm!
Üdv Mindenkinek!

  • Oldal:
  • 1