Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Bitmap speichern - inkompatibel ? (https://www.delphipraxis.net/106938-bitmap-speichern-inkompatibel.html)

letsfetz 19. Jan 2008 10:54


Bitmap speichern - inkompatibel ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Selten aber nun muss ich doch mal was fragen...

Ich bin im Begriff ein kleines Tool zu schreiben, welches eine BMP in bestimmter Auflösung in lauter einzelne BMP's mit 128 x 128 Pixeln zerlegt und diese einzeln abspeichert. (Das sollen mal Texturen für ein Gamelevel werden)

Das funktioniert eigentlich auch schon sehr gut aber da gibts nen kleines Problem welches mir Kopfzerbrechen bereitet:

Die Bitmaps werden sehrwohl einzeln abgespeichert jedoch kann ich diese mit jeglicher Bildbearbeitungssoftware nicht öffnen. Fehlermeldung "Unbekanntes Dateiformat". Interessanterweise kann ich diese mit dem eingebauten Windows-Bildbetrachter öffnen und sehen. Irgendwie komisch. Hat da vllt jemand eine Idee was ich da wohl falschgemacht habe ?

Ich hänge das gesamte Projekt mal an.

Danke schonmal im voraus und ich bin gespannt wie ein Regnschirm, wo wohl mein Denkfehler ist. (Und sorry für das böse Hardcoding.. es war ursprünglich auch nur als Test und "Einwegtool" gedacht :-) )

DeddyH 19. Jan 2008 11:41

Re: Bitmap speichern - inkompatibel ?
 
Wieso benutzt Du nicht einfach CopyRect? Außerdem zeichnest Du auf den Canvas des Image, nicht auf den der Bitmap.

[edit] Schau mal, ob Du hiermit etwas anfangen kannst:
Delphi-Quellcode:
function SaveImagePart(const src: TBitmap; //Quellbitmap
                       const x,y,         //Startpunkt
                       iWidth,            //Höhe und Breite
                       iHeight: Integer;
                       sName: TFileName;  //Dateiname zum Speichern
                       PixelFormat: TPixelFormat = pf24Bit): Boolean;
var memBmp: TBitmap;
begin
  Result := False;
  sName := ChangeFileExt(sName,'.bmp');
  memBmp := TBitmap.Create;
  try
    memBmp.Width := iWidth;
    memBmp.Height := iHeight;
    memBmp.PixelFormat := PixelFormat;
    BitBlt(memBmp.Canvas.Handle, 0, 0, iWidth, iHeight, src.Canvas.Handle, x, y, SRCCOPY);
    memBmp.SaveToFile(sName);
    Result := True;
  finally
    memBmp.Free;
  end;
end;
[/edit]

letsfetz 19. Jan 2008 13:03

Re: Bitmap speichern - inkompatibel ?
 
Zitat:

Zitat von DeddyH
Wieso benutzt Du nicht einfach CopyRect? Außerdem zeichnest Du auf den Canvas des Image, nicht auf den der Bitmap.

Ok, soweit sogut ... Danke, ich glaube Du bringst mich auf den richtigen Weg. Das mit CopyRect ist schon klar, da geb ich Dir vollkommen Recht. Ich wollte das die große Bitmap unter Umständen noch pixelweise farbmanipulieren (noch nicht implementiert).

Aber Deine 2. Aussage ist für mich sehr interessant ! - Warum bietet mir das Delphi sowas wie:

Delphi-Quellcode:
form1.Image2.Picture.Bitmap.SaveToFile
an ?

Und dabei wundere ich mich immernoch warum der Windows-Bildbetrachter die einzelnen Bmp's korrekt anzeigt und diese von dort aus in einem brauchbaren *.BMP abzuspeichern vermag.

Ich glaube ich muss das Programm noch mal von Grund auf neu überdenken. (war eh nur so'n Schnellschuss) :-)

Aber Danke schonmal...

DeddyH 19. Jan 2008 13:29

Re: Bitmap speichern - inkompatibel ?
 
Zitat:

Zitat von letsfetz
Warum bietet mir das Delphi sowas wie:
Delphi-Quellcode:
form1.Image2.Picture.Bitmap.SaveToFile
an ?

Damit Du die (evtl. manipulierte) Bitmap abspeichern oder z.B. eine Kopie unter anderem Namen erstellen kannst. Worauf ich Dich aufmerksam machen wollte, ist der Umstand, dass Du nicht auf der im Image geladenen Bitmap, sondern auf der Zeichenfläche des Image selbst gezeichnet hast. Würdest Du allerdings auf der Bitmap zeichnen, wäre diese ja anschließend verfälscht. Also ist der in meinen Augen gangbarste Weg, eine temporäre Speicherbitmap zu erstellen, den gewünschten Bereich der Quellbitmap darauf zu kopieren und diese Kopie dann abzuspeichern (nichts anderes tue ich in der geposteten Funktion). Allerdings habe ich statt CopyRect BitBlt verwendet, das geht schneller ;)

[edit] Vertipper korrigiert [/edit]

letsfetz 19. Jan 2008 15:09

Re: Bitmap speichern - inkompatibel ?
 
Ok, Prolem gelöst.
Danke nochmals... Oft genügt der richtige Tip in die richtige Richtung :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.

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