Autor Beitrag
Noob23
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 93

Win XP, Win Server 2003, Win 7, Ubuntu
Delphi 7, c/c++ Dev-c++, µC-8051 Keil, Webdesign Notepad++
BeitragVerfasst: Mo 22.02.10 14:59 
Hallo zusammen,

habe mir grad ein Programm geschrieben, welches ein Bild(jpg) läd und in einem TImage fester Größe (stretch) anzeigt. Nun soll via Maus ein Ausschnitt markiert und in ein zweites Timage kopiert werden können (kleineres Thumbnail wird auch gestretcht).

Wenn ich versuche das ganze mit canvas.copyrect zu lösen gibt es farbverfälschungen.
Mit canvas.stretchdraw komm ich momentan mit den Parametern noch nicht klar, so dass der Ausschnitt stimmt - denk mir aber das das auch nicht die beste Lösung sein kann.

Ehrlich gesagt kann ich gar nicht verstehen, warum es zu diesen Verfälschungen kommt, wandelt man nicht das JPEG mit "assign" in ein BMP um?

Habe nur am Rand mit Bildern in Delphi gearbeitet, bin daher Dankbar für jeden Denkanstoss wie man die Sache besser angehen kann!

Grüße
Noob23

_________________
Man streitet zwar noch über die Entstehung der Erde -
Aber über den Untergang sind sich doch schon alle einig...
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 22.02.10 18:32 
Um dir besser helfen zu können solltest du wohl deinen genauen Code zeigen und die Farbverfälschungen genauer beschreiben oder einen Screenshot anhängen.
So direkt fällt mir jedenfalls nix ein.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Noob23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 93

Win XP, Win Server 2003, Win 7, Ubuntu
Delphi 7, c/c++ Dev-c++, µC-8051 Keil, Webdesign Notepad++
BeitragVerfasst: Mo 22.02.10 19:33 
image1 ist 500 x 500 Pixel groß und stretch := true
image2 ist 80 x 120 Pixel (stretch auch true wobei das ja egal sein dürfte wenn ich 80 x 120 Pixel kopiere)

Kopiert wird das Thumb Mithilfe der Ereignisse OnMouseDown OnMouseUp vom Image1.

Habe wegen der Übersichtlichkeit nur die wichtigsten Code-Passagen kopiert:
Quelltext zum öffnen des JPG´s:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  image := TJPEGImage.Create;
  try
    image.CompressionQuality := 100;
    image.LoadFromFile(Filename);
    image1.Picture.Bitmap.Assign(image);
  finally
    image.Free;
  end;


Quelltext zum kopieren des Thumbnial:
ausblenden Delphi-Quelltext
1:
  image2.Canvas.CopyRect(rect(0,0,80,120),image1.Canvas,rect(x1,y1,x2,y2));					


nur wenn wirklich ein Ausschnitt von 80x120Pixel genommen wurde gabs kein Probleme, also z.B.
ausblenden Delphi-Quelltext
1:
  image2.Canvas.CopyRect(rect(0,0,80,120),image1.Canvas,rect(50,50,130,170));					


...sonst sind Verfälschungen wie im Anhang aufgetreten.

Hoffe die Beschreibung genügt fürs Verständniss.

Besten Dank
Noob23
Einloggen, um Attachments anzusehen!
_________________
Man streitet zwar noch über die Entstehung der Erde -
Aber über den Untergang sind sich doch schon alle einig...
Noob23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 93

Win XP, Win Server 2003, Win 7, Ubuntu
Delphi 7, c/c++ Dev-c++, µC-8051 Keil, Webdesign Notepad++
BeitragVerfasst: Mo 22.02.10 21:29 
Hab nochmal den wesentlichen Teil in ein extra Programm gepackt.

Hier kann man zwar jetz keine JPG´s speichern aber das tut der Sache keinen Abbruch, da man den Fehler schon in den Images sehen kann.

Hab zum Vergleich eine normale TImage und eine aus der Graphics32 (es ist aber kein sehenswerter Unterschied).

Aber nachdem was die Graphics so alles leistet (wenn man die Beispiele angeschaut hat) sollte das mit den Verfärbungen doch kein Problem sein... bin leider nur noch dahinter gestiegen.

Werd mir Morgen den Resampler anschaun - vll ist der des Rätsel´s Lösung

Grüße
Noob23
Einloggen, um Attachments anzusehen!
_________________
Man streitet zwar noch über die Entstehung der Erde -
Aber über den Untergang sind sich doch schon alle einig...
Noob23 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 93

Win XP, Win Server 2003, Win 7, Ubuntu
Delphi 7, c/c++ Dev-c++, µC-8051 Keil, Webdesign Notepad++
BeitragVerfasst: Di 23.02.10 20:48 
Mit der Anweisung 'SetStretchBltMode' scheint es nun zu funktionieren, wäre trotzdem Dankbar wenn noch jemand eine bessere Lösung parat hat und diese postet, da ich bisher nicht sicher sein kann ob es nun auch in jedem Fall funktioniert.

Grüße
Noob23

_________________
Man streitet zwar noch über die Entstehung der Erde -
Aber über den Untergang sind sich doch schon alle einig...