Entwickler-Ecke
Multimedia / Grafik - Bilder verändern (1 Pixel)
Frankieboy - Mo 12.01.09 10:50
Titel: Bilder verändern (1 Pixel)
Hallo,
ich frage mich gerade, ob es Units oder ähnliches zur Bildbearbeitung gibt!
Ich müsste bei populären Bildarten (Jpeg, Tiff, Bmp und anderen) die Größe bestimmen und dann einen Pixel farblich ändern.
Da ich noch nie mit Delphi und Bildern gearbeitet habe, stelle ich lieber mal diese Frage.
Danke,
Frank
jaenicke - Mo 12.01.09 11:08
Bei Bitmap und Jpeg ist das kein Problem, denn die kennt Delphi schon selbst (für Jpeg muss die gleichnamige Unit in uses).
Die Größe der anderen bestimmen und diese anzeigen ist auch kein Problem mit GraphicEx. Speichern kann man diese damit aber nicht mehr im selben Format.
Schau mal hier, da findest du einige Komponenten für manche Formate:
http://www.torry.net/pages.php?id=111
Frankieboy - Mo 12.01.09 16:10
Danke für die Antwort!
bei Torrys' hab ich bis auf die WSQ Image Library nichts gefunden :-(
Und um die zu benutzen, muss man auf jedem Rechner die DLL neu registrieren, also nicht praktikabel...
Gibt es keine anderen Units für ein paar zusätzliche Bildformate?
Ich will sie ja nur öffnen, oder in ein Bitmap konvertieren, dann etwas ändern und wieder im alten Format speichern!
Danke nochmal,
Frank
Christian S. - Mo 12.01.09 16:16
Titel: Re: Bilder verändern (1 Pixel)
Frankieboy hat folgendes geschrieben : |
Ich müsste bei populären Bildarten (Jpeg, Tiff, Bmp und anderen) die Größe bestimmen und dann einen Pixel farblich ändern. |
Ich werfe hier mal in den Raum, dass Du bei JPEG irgendwie noch sicherstellen musst, dass dieses eine Pixel bei der Kompression nicht verändert wird.
jaenicke - Mo 12.01.09 16:34
Frankieboy hat folgendes geschrieben : |
bei Torrys' hab ich bis auf die WSQ Image Library nichts gefunden :-( |
Dass du links auch auf TIFF Images, Other formats etc. klicken kannst ist dir aber klar? :gruebel:
Und
Christian S. hat da natürlich auch einen wichtigen Punkt angesprochen.
Frankieboy - Mo 12.01.09 20:07
jaenicke hat folgendes geschrieben: |
Und Christian S. hat da natürlich auch einen wichtigen Punkt angesprochen. |
Nicht ganz. Es ist wichtig, dass das Pixel einen
anderen Farbwert als vor dem Speichern hat. Ob der Wert genau dem entspricht, in dem man ihn eigentlich geändert hat, ist nicht so wichtig.
Die meisten VCs und DLLs auf Torry's Seite sind Shareware oder Trialware, also für mich nicht interessant. Erstmal reichen auch nur BMP und JPG Unterstützung.
Trotzdem habe ich noch eine Frage:
Wenn ich ein TImage benutze, und ein Bild (BMP oder JPEG) lade, wie verändere ich dann am besten ein Pixel um einen leichten Farbwert?
habe es so versucht (erstmal mit clBlack, damit man das Ergebnis sieht):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var BufferImage: TImage
[..] begin BufferImage.Picture.LoadFromFile('C:\router.bmp'); BufferImage.Picture.Bitmap.Canvas.Pixels[Pixel.X,Pixel.Y] := clBlack; BufferImage.Picture.SaveToFile('C:\router.bmp'); end;
end. |
Leider verschwindet das Bild aus dem TImage auf dem Formular, sobald der neue Farbwert clBlack zugewiesen wurde...
Wie kann ich ein entsprechendes Pixel leicht im Farbwert leicht nach oben oder unten ändern?
Danke nochmal,
Frank
jaenicke - Mo 12.01.09 20:18
Frankieboy hat folgendes geschrieben : |
Leider verschwindet das Bild aus dem TImage auf dem Formular, sobald der neue Farbwert clBlack zugewiesen wurde... |
Das kann ich nicht reproduzieren. :nixweiss:
Bei mir funktioniert der Code exakt so.
Frankieboy hat folgendes geschrieben : |
Wie kann ich ein entsprechendes Pixel leicht im Farbwert leicht nach oben oder unten ändern? |
Indem du den alten Wert vorher ausliest und änderst statt ihn direkt zu überschreiben. ;-)
Was ich nicht verstehe: Wozu das TImage? Ich denke du willst nur das Bild verändern? Willst du es auch anzeigen? Ansonsten funktioniert auch das:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm132.btn1Click(Sender: TObject); var Picture: TPicture; begin Picture := TPicture.Create; try Picture.LoadFromFile('C:\test.bmp'); Picture.Bitmap.Canvas.Pixels[1, 1] := clBlack; Picture.SaveToFile('C:\test2.bmp'); finally Picture.Free; end; end; |
Genauso mit Jpeg, wenn die Unit eingebunden ist.
Frankieboy - Di 13.01.09 17:40
jaenicke hat folgendes geschrieben : |
Genauso mit Jpeg, wenn die Unit eingebunden ist. |
Leider nicht!
Ich kann das Bild zwar als JPEG
laden, aber nicht
speichern.
In dem Fall bekomme ich ein leeres Bild.
jaenicke - Di 13.01.09 21:10
Ok, du hast Recht, dann eben richtig: :mrgreen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| var Picture: TBitmap; JpegImg: TJPEGImage; begin JpegImg := TJPEGImage.Create; try JpegImg.LoadFromFile('C:\test.jpg'); try Picture := TBitmap.Create; Picture.Assign(JpegImg); Picture.Canvas.Pixels[1, 1] := clBlack; JpegImg.Assign(Picture); finally Picture.Free; end; JpegImg.SaveToFile('C:\test2.jpg'); finally JpegImg.Free; end; |
Logikmensch - Mi 14.01.09 06:40
Hallo,
kannst Du uns mal aufklären, was Du genau vorhast, ich meine die Sache mit dem einen Pixel ändern.. Einfach neugierig sei...
LG.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!