Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi warum sind .bmp sooo viel größer als Jpeg? (https://www.delphipraxis.net/112137-warum-sind-bmp-sooo-viel-groesser-als-jpeg.html)

Neutral General 15. Apr 2008 18:07

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Echt ? Wird das komplette Bitmap kopiert? Hab mich als ich das zusammengeschrieben habe auch kurz gefragt obs en Speicherleck gibt, aber da dachte ich:

Ich weise den Pointer auf das Bitmap ja dem Image.Picture.Bitmap zu und das wird ja freigegeben wenn das Image freigegeben wird.

Falsch gedacht?

SirThornberry 15. Apr 2008 18:12

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Delphi-Quellcode:
TPicture = class(....)
[...]
  property Bitmap: TBitmap read GetBitmap write SetBitmap;
[...]

procedure TPicture.SetBitmap(Value: TBitmap);
begin
  SetGraphic(Value);
end;

procedure TPicture.SetGraphic(Value: TGraphic);
var
  NewGraphic: TGraphic;
begin
  NewGraphic := nil;
  if Value <> nil then
  begin
    NewGraphic := TGraphicClass(Value.ClassType).Create;
    NewGraphic.Assign(Value); //<=== Tada, es wird kopiert :-)
[...]

Namenloser 15. Apr 2008 18:25

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Zitat:

Zitat von Muetze1
Zitat:

Zitat von NamenLozer
Du kannst übrigens ohne Probleme eine Datei als JPEG in ein Bitmap laden, darauf herumzeichnen und anschließend wieder als .jpg speichern.

Was aber intern wieder zum Auspacken führt und dann zum erneuten komprimieren.

Hab ich was anderes behauptet? :gruebel: Intern dürfte die Grafik wahrscheinlich eh als Bitmap vorliegen. (Bzw Canvas, das aber vom Speicherverbrauch her identisch sein sollte).

Zitat:

Zitat von Muetze1
Zitat:

Zitat von NamenLozer
Was willst du jetzt für ne Antwort hören? Weil JPEG im Gegensatz zu BMP komprimiert.

Bitmap komprimiert auch: RLE, aber die ist bei weitem nicht so effizient, aber dafür lossless.

Die RLE-Komprimierung kann man aber echt vergessen. Dann schon lieber GIF, oder noch besser: PNG.

DMW 15. Apr 2008 18:42

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Zitat:

Zitat von Muetze1
Bitmap komprimiert auch: RLE, aber die ist bei weitem nicht so effizient, aber dafür lossless.

Das ist nur bei Bitmaps mit 4 oder 8 bpp möglich.
Eine ordentliche verlustfreie Kompression für Bitmaps bietet das PNG-Format. Für Photos eignet sich das allerdings nicht.

Nuclear-Ping 16. Apr 2008 11:31

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Zitat:

Zitat von Spiderpig_GER_15
wie kann ich etwas in ein Tbitmap laden?

Delphi-Quellcode:
uses ..., JPEG, ...
var
  jpg: TJPEG;
  bmp: TBitmap;
begin
  jpg := TJPEG.Create;
  bmp := TBitmap.Create;
  try
    jpg.LoadFromFile ('C:\irgendeine.jpg');
    bmp.Assign (jpg); // <<- JPG dem BMP zuweisen
    bmp.SaveToFile ('C:\irgendeine.bmp');
  finally
    FreeAndNil (bmp);
    FreeAndNil (jpg);
  end;
end;
Funktioniert andersrum auch. Also bmp.LoadFromFile, Jpg.Assign, Jpg.SaveToFile ...

mimi 16. Apr 2008 14:41

Re: warum sind .bmp sooo viel größer als Jpeg?
 
@Spiderpig_GER_15
Wenn du ein Bild "Rund" da stellen möchtest solltest du die Eigenschaft Tranzparent von TImage auf true stellen und bei
TranparentColor eine Farbe zuweisen.

Spiderpig_GER_15 17. Apr 2008 12:14

Re: warum sind .bmp sooo viel größer als Jpeg?
 
@mimi, aber davon wird mein Bild auch nicht 'runder' oder? Wo ist eignetlich der unterschied wenn ich das Bild auf transperent stelle?

@Nuclear Ping vieeelen dank, genau das war meine Frage thx

Thx
:-D
Spiderpig

_frank_ 17. Apr 2008 12:18

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Zitat:

Zitat von Spiderpig_GER_15
@mimi, aber davon wird mein Bild auch nicht 'runder' oder? Wo ist eignetlich der unterschied wenn ich das Bild auf transperent stelle?

du must natürlich dein bild an den stellen mit der Transparent-Farbe übermalen, wo es transparent werden soll :) also eine Elipse und alles was zwischen der und dem Rand des Bitmaps ist...

Gruß Frank

mimi 17. Apr 2008 13:24

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Naja, es stimmt schon, rund wird das Viereck dadurch nicht, aber es sieht so aus der Anwender wird davon nix mitbekommen.

Alles was der Transparent Farbe entspricht wird mit dem Hintergrund Übermalt.

_frank_ 17. Apr 2008 14:07

Re: warum sind .bmp sooo viel größer als Jpeg?
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich hab da mal was zusammengeschrieben...einfach ein TImage aufs form, ein bitmap reinladen und folgende Methode mit einbauen:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var bmp_mask,bmp_tmp:TBitmap;
const cl_trans_tmp=clWhite;
      cl_trans=clFuchsia;
begin
  bmp_mask:=TBitmap.create;
  bmp_tmp:=TBitmap.create;
  //load bitmap
  bmp_tmp.Assign(image1.picture.bitmap);
  //resize mask
  bmp_mask.width:=bmp_tmp.width;
  bmp_mask.height:=bmp_tmp.height;
  //create the mask;
  bmp_mask.canvas.brush.color:=cl_trans;
  bmp_mask.canvas.Pen.color:=cl_trans;
  bmp_mask.Canvas.FillRect(rect(0,0,bmp_mask.width,bmp_mask.height));
  bmp_mask.canvas.brush.color:=cl_trans_tmp;
  bmp_mask.canvas.Pen.color:=cl_trans_tmp;
  bmp_mask.canvas.ellipse(0,0,bmp_mask.width,bmp_mask.height);
  bmp_mask.TransparentColor:=cl_trans_tmp;
  bmp_mask.Transparent:=true;
  //merging the mask with original bitmap
  bmp_tmp.Canvas.Draw(0,0,bmp_mask);
  bmp_tmp.TransparentColor:=cl_trans;
  bmp_tmp.Transparent:=true;
  //Draw masked bitmap
  canvas.draw(0,0,bmp_tmp);
  //free Objects
  bmp_tmp.free;
  bmp_mask.free;
end;
Gruß Frank


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz