AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap speichern - inkompatibel ?
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap speichern - inkompatibel ?

Ein Thema von letsfetz · begonnen am 19. Jan 2008 · letzter Beitrag vom 19. Jan 2008
Antwort Antwort
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#1

Bitmap speichern - inkompatibel ?

  Alt 19. Jan 2008, 10:54
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 )
Angehängte Dateien
Dateityp: zip zerhacker_176.zip (269,5 KB, 11x aufgerufen)
Michael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Bitmap speichern - inkompatibel ?

  Alt 19. Jan 2008, 11:41
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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#3

Re: Bitmap speichern - inkompatibel ?

  Alt 19. Jan 2008, 13:03
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:

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...
Michael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Bitmap speichern - inkompatibel ?

  Alt 19. Jan 2008, 13:29
Zitat von letsfetz:
Warum bietet mir das Delphi sowas wie: 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]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
letsfetz

Registriert seit: 25. Mär 2005
Ort: Großraum Stuttgart
23 Beiträge
 
Delphi 7 Personal
 
#5

Re: Bitmap speichern - inkompatibel ?

  Alt 19. Jan 2008, 15:09
Ok, Prolem gelöst.
Danke nochmals... Oft genügt der richtige Tip in die richtige Richtung
Michael
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:19 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