PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TJPEG -> TBitmap?


aths
2004-09-30, 18:08:19
mainform.ibild.Picture.LoadFromFile(a);

a ist ein String mit .jpg-Endung, da ich (dank Unit JPEG) JPEGs laden und anzeigen will. Und analysieren. Leider geht das hier nicht:

a:=mainform.ibild.canvas.pixels[x,y];

Zwar wird fehlerfrei kompiliert, doch bei dieser Zeile gibts dann einen Runtime Error, er verlangt ein Bitmap. Mit

a:=mainform.ibild.picture.Bitmap.canvas.pixels[x,y];

wird das Bild komplett ausgeblendet, sofern er zu dieser Zeile kommt.

Wie komme ich pixelweise an die einzelnen TColor-Werte? Entweder müsste ich den Bildinhalt in ein TBitmap kriegen, oder den Grafikinhalt (und nicht die gekapselten JPEG-Daten) in einen Stream. Leider weiß ich nicht, wie das funzt.

Jazz
2004-09-30, 20:51:30
Nimm ein neues Bitmap, und weise das jpeg dann mit Assign zu:
var
bmp : TBitmap;
DeinJPEGImage : TJPEGImage;
begin
...
bmp:=TBitmap.Create
bmp.Assign(DeinJPEGImage);
...
Prinzip klar?

Gruß,
Jazz

aths
2004-09-30, 22:14:08
Nimm ein neues Bitmap, und weise das jpeg dann mit Assign zu:
var
bmp : TBitmap;
DeinJPEGImage : TJPEGImage;
begin
...
bmp:=TBitmap.Create
bmp.Assign(DeinJPEGImage);
...
Prinzip klar?Nein :( Ich lege ja kein TJPEGImage an, sondern lade das Bild direkt mit mainform.ibild.Picture.LoadFromFile(a). Wenn ich ein TBitmap anlege, und es aufs Image malen will:

bbild.assign(jbild);
bbild.Canvas.Draw(0,0,mainform.ibild.Picture.graphic);

passiert leider nix.

Jazz
2004-09-30, 22:29:15
Ich lege ja kein TJPEGImage an
Und warum nicht? Das ist aber der übliche Weg, das TJPEGImage als Container zu verwenden und zu Anzeige ein normales Image zu nehmen. Die Zuweisung an dieses Image erfolgt dann mit Assign wie oben, und Zugriff auf die Pixel hast du auch.

Nagelbrett
2004-10-01, 00:45:57
Hallo aths,
wie ich im anderen Thread schonmal geschrieben habe, sollte das auf jeden Fall funktionieren:
var
bmp: TBitmap;
begin
mainform.ibild.Picture.LoadFromFile(a);

bmp := TBitmap.Create;
bmp.Assign(mainform.ibild.Picture.Graphic);
end;
habe es gerade nochmal getestet, und es funktioniert definitiv auch, wenn man ein JPEG geladen hat

aths
2004-10-01, 01:18:42
Hallo aths,
wie ich im anderen Thread schonmal geschrieben habe, sollte das auf jeden Fall funktionieren:
var
bmp: TBitmap;
begin
mainform.ibild.Picture.LoadFromFile(a);

bmp := TBitmap.Create;
bmp.Assign(mainform.ibild.Picture.Graphic);
end;
habe es gerade nochmal getestet, und es funktioniert definitiv auch, wenn man ein JPEG geladen hatBin jetzt müde und kann das nicht intensiv testen, aber es schein prinzipiell so zu klappen (kleinen Testlauf gemacht indem einfach die Farbe pixelweise in ein anderes Image kopiert wird.) Danke.