Autor Beitrag
Frankieboy
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Mo 12.01.09 10:50 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
www.torry.net/pages.php?id=111
Frankieboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 12.01.09 16:16 
user profile iconFrankieboy hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.01.09 16:34 
user profile iconFrankieboy hat folgendes geschrieben Zum zitierten Posting springen:
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 user profile iconChristian S. hat da natürlich auch einen wichtigen Punkt angesprochen.
Frankieboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Mo 12.01.09 20:07 
jaenicke hat folgendes geschrieben:


Und user profile iconChristian 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):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  BufferImage: TImage {ist schon erstellt }

[..]
begin
  BufferImage.Picture.LoadFromFile('C:\router.bmp');
  BufferImage.Picture.Bitmap.Canvas.Pixels[Pixel.X,Pixel.Y] := clBlack; { <- Bild verschwindet vom Form }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 12.01.09 20:18 
user profile iconFrankieboy hat folgendes geschrieben Zum zitierten Posting springen:
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.

user profile iconFrankieboy hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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[11] := clBlack;
    Picture.SaveToFile('C:\test2.bmp');
  finally
    Picture.Free;
  end;
end;
Genauso mit Jpeg, wenn die Unit eingebunden ist.
Frankieboy Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65



BeitragVerfasst: Di 13.01.09 17:40 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 13.01.09 21:10 
Ok, du hast Recht, dann eben richtig: :mrgreen:
ausblenden 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[11] := clBlack;
      JpegImg.Assign(Picture);
    finally
      Picture.Free;
    end;
    JpegImg.SaveToFile('C:\test2.jpg');
  finally
    JpegImg.Free;
  end;
Logikmensch
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 390

Win XP
Delphi 2007 Prof., XE2, XE5
BeitragVerfasst: 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.

_________________
Es gibt keine Probleme - nur Lösungen!