AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bild wird negativ gedruckt

Ein Thema von Moony · begonnen am 24. Jun 2008 · letzter Beitrag vom 25. Jun 2008
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

Bild wird negativ gedruckt

  Alt 24. Jun 2008, 17:36
Hallo zusammen,

ich hab da so ein Phänomen:

In meiner Anwendung schicke ich unter anderem Bilder an den Drucker. Neuerdings habe ich auch runde Ecken bei Bildern eingebaut. Das Phänomen ist, dass ich einen Drucker habe bei dem Die Bilder, sobald ich die runden Ecken einstelle, als Negativ gedruckt werden. Mit eckigen Ecken normal. Habe das dann an 3 anderen Druckern von unterschiedlichen Herstellern probiert und die machen das richtig.

Wie kann ich diesem Problem auf die Schliche kommen?

Danke & Gruß, Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.201 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Bild wird negativ gedruckt

  Alt 24. Jun 2008, 17:38
Wie druckst du die Dateien (Quellcode)? Sind es evtl. TIFF-Dateien?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Bild wird negativ gedruckt

  Alt 24. Jun 2008, 17:44
Das sind ganz normale jpg bilder mit 24 bit. Ich schicke es mit

Printer.Canvas.StretchDraw(myRect, myGraphic);

an den Drucker. Das myGraphic ist bereits mit den runden Ecken. Ich habe mal eine Drucksimulation, bei der das Bild, welches an den Drucker geschickt wird als Bilddatei gespeichert wird. Diese Datei ist vollkommen in Ordnung. Wenn ich das aber an den Drucker schicke, sind die Bilder mit den runden Ecken als negativ ausgedruckt.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Bild wird negativ gedruckt

  Alt 24. Jun 2008, 18:44
was verstehst du unter negativ? Sind die farben anders oder ist das Bild geflippt?
Unabhängig davon liegt es an Stretchdraw. Nicht alle Druckertreiber unterstützen die volle funktionalität.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#5

Re: Bild wird negativ gedruckt

  Alt 24. Jun 2008, 19:13
Problem:
Zitat von SirThornberry:
Unabhängig davon liegt es an Stretchdraw. Nicht alle Druckertreiber unterstützen die volle funktionalität.
Lösung: z.B.: hier
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Bild wird negativ gedruckt

  Alt 25. Jun 2008, 08:46
Unter negativ verstehe ich, dass das Bild als Negativ gedruckt wird. Sprich alle Farben werden invertiert ausgedruckt.

Ich werde die Funktion ausprobieren und melde mich hier wieder. Danke.

Nachtrag:

Folgendes Zwischenergebnis:

1. Wenn ich die genannte "PrintBitmap" Routine verwende, dann werden meine abgerundeten Ecken in Rosa gefärbt.
2. Wenn ich dann auf drucken gehe, wird das Bild richtig gedruckt, aber mit rosa Ecken.

Das Bild wird vorher folgendermaßen mit den Runden Ecken gesetzt:

Delphi-Quellcode:
procedure DoItRound(var myImage: TImage; pixels: Integer);
var bmp_mask,
    bmp_tmp : TBitmap;

const cl_trans_tmp = clWhite;
      cl_trans = clFuchsia;
begin
  bmp_mask := TBitmap.create;
  bmp_tmp := TBitmap.create;
  try
    //load bitmap
    bmp_tmp.Assign(myImage.picture.bitmap);

    //resize mask
    bmp_mask.PixelFormat := pf24bit;
    bmp_tmp.PixelFormat := pf24bit;
    bmp_mask.width := myImage.picture.bitmap.width;
    bmp_mask.height := myImage.picture.bitmap.height;

    //create the mask;
    bmp_mask.canvas.brush.color := cl_trans;
    bmp_mask.canvas.Pen.color := cl_trans;
    bmp_mask.Canvas.FillRect(rect(0,0,bmp_mask.width,bmp_mask.height));
    bmp_mask.canvas.brush.color := cl_trans_tmp;
    bmp_mask.canvas.Pen.color := cl_trans_tmp;
    bmp_mask.canvas.RoundRect(0,0,bmp_mask.width,bmp_mask.height, pixels,pixels);
    bmp_mask.TransparentColor := cl_trans_tmp;
    bmp_mask.Transparent := true;

    //merging the mask with original bitmap
    bmp_tmp.Canvas.Draw(0,0,bmp_mask);
    bmp_tmp.TransparentColor := cl_trans;
    bmp_tmp.Transparent := true;

    //Draw masked bitmap
   BitBlt(myImage.Canvas.Handle, 0, 0, myImage.picture.bitmap.width, myImage.picture.bitmap.height, bmp_tmp.canvas.Handle, 0, 0, srcCopy);
    myImage.canvas.draw(0,0,bmp_tmp);
    myImage.Picture.Bitmap.TransparentColor := cl_trans;
    myImage.Transparent := true;
  finally
    //free Objects
    bmp_tmp.free;
    bmp_mask.free;
  end;
end;
Wie gesagt. Die Routine funktioniert an sich sehr gut, um die runden Ecken in die Bilder zu bekommen. Nur der eine Drucker wehrt sich dagegen. Wenn ich die StrechDraw anwende, werden die Ecken transparent gezeichnet, aber das Bild als Negativ gedruckt. Verwende ich die genannte PrintBitmap Routine, dann wird das Bild richtig gedruckt, die Ecken aber rosa gezeichnet. Was ein Teufelskreis......!!!!

Ich hoffe nur, dass es da einen Ausweg gibt...

Gruß, Moony

[edit=SirThornberry]Beiträge zusammengeführt - nächstes mal bitte die Edit-Funktion verwenden - Mfg, SirThornberry[/edit]
[edit=sakura] Zeilenumbrüche ermöglicht... Mfg, sakura[/edit]
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Bild wird negativ gedruckt

  Alt 25. Jun 2008, 11:05
Das wird wohl dran liegen das Stretchdraw einfach dein Rosa als Transparent interpretiert.
Ist an der Stelle wo du diese "runden ecken" hast auf dem Blatt dann was anderes zu sehen? Wenn nicht könntest du diese einfach weiß einfärben.
Oder bringst eben erst dein Bild auf die Canvas und malst anschließend was drüber an den stellen wo die weißen ecken dann sind (weiß wird ja nicht mit gedruckt)

Ich habe ein wenig den Eindruck das du deine eigene Funktion nicht verstehst.

Zur Zeit erstellst du dort ein Bild welches in den Ecken Rosa Rundungen hat und in der Mitte weiß ist. Dieses Bild malst du dann über dein aktuelles unter Berücksichtigung dessen das weiß als Transparent gewertet werden soll und somit das weiß nicht mit aufs Bild kopiert wird.
Als Resultat kommt dabei ein Bild heraus was aus deinem ursprünglichem Bild besteht mit Rosa Rundungen in den Ecken.

Wenn dich jetzt dieses Rosa stört wäre es doch das einfachste einfach anstelle von Rosa, die Farbe zu nehmen die du haben willst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#8

Re: Bild wird negativ gedruckt

  Alt 25. Jun 2008, 11:11
Hallo Moony!

Du verwendest bzw. nutzt die Transparent Eigenschaft von TBitmap aus und da liegt das Problem. Delphi-Referenz durchsuchenTransparent, Delphi-Referenz durchsuchenTransparentMode und Delphi-Referenz durchsuchenTransparentColor werden von der VCL angeboten und diese implementiert alle Routinen so, dass sie diese Eigenschaft interpretiert und entsprechend umsetzt. Auf der WinAPI Ebene gibt es diese Eigenschaft nicht, dort musst du eigentlich per Hand mit Masken arbeiten und alle nicht transparenten Teile auf dein Ziel malen lassen.

Problem: MSDN-Library durchsuchenBitBlt() und andere WinAPI kennen keine TransparentColor und malen somit diese mit. Deine Rosa-Farbe ist deine TransparentColor und wird somit mit ausgegeben.

Lösung: Erzeuge dir einen DC mit dem Ergebnisbild, also mit schon umgesetzter Transparenz. Dies erreichst du z.B. in dem du ein TBitmap anlegst und darauf mit Draw() einmal das Bild mit der Transparenzangabe raufzeichnen lässt. Da die Standardfarbe von einem TBitmap (bzw. DC) weiß ist, werden deine Ecken weiß sein, was der Papierfarbe entsprechend sollte. Somit würde das Ausdrucken ein rundes Bild mit weißen Ecken erzeugen.

Zur Kontrolle lege dir ein TImage auf dein Formular und weise mit Assign() dein endgültiges Bild vor dem Ausdrucken zu. Das TImage sollte das richtige Bild anzeigen - Voraussetzung ist dabei aber auch, dass die Transparent Eigenschaft von dem zugewiesenen TBitmap und vom anzeigenden TImage false sind.

Gruss,
Yellow
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Bild wird negativ gedruckt

  Alt 25. Jun 2008, 11:50
@SirThornberry:
Ich kann nicht einfach sagen, dass ich weiß nehme statt "rosa", weil ich nicht weiß was hinter dem Bild für eine Farbe besteht. Das kann jederzeit variieren.
Davon abgesehen werden die rosa Ecken erst gezeichnet, wenn ich die PrintBitmap Routine verwende.

@Yellow:
Das ist ja alles gut, WENN ich einen weißen Hintergrund habe. Da ich aber nicht weiß ob und welche Farbe hinter dem Bild erstellt wird, kann ich keine weißen Ecken zeichnen, sondern transparent.

Wie gesagt, das Zeichnen der transparenten Ecken funktioniert auf allen anderen Druckern mit der oben genannten Routine. Wenn ich jedoch mit PrintBitmap es versuche zu zeichnen, wird das Bild richtig gedruckt, aber mit rosa Ecken.

Ich MUSS wegen des wechselnden Hintergrunds transparente Ecken zeichnen.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Yellow579
(Gast)

n/a Beiträge
 
#10

Re: Bild wird negativ gedruckt

  Alt 25. Jun 2008, 12:20
Hallo Moony!

Zitat von Moony:
Das ist ja alles gut, WENN ich einen weißen Hintergrund habe. Da ich aber nicht weiß ob und welche Farbe hinter dem Bild erstellt wird, kann ich keine weißen Ecken zeichnen, sondern transparent.
Du verstehst nicht, wie Transparenz arbeitet. Und von daher verstehst du meinen Lösungsansatz nicht.

Und wenn sich dein Hintergrund ändert, dann male zuvor auf das neue Bitmap dein sich wechselnden Hintergrund auf und dann mit Draw() oder StretchDraw() dein rundes Bild. Ergebnis: siehe letzten Absatz.

Zitat von Moony:
Wie gesagt, das Zeichnen der transparenten Ecken funktioniert auf allen anderen Druckern mit der oben genannten Routine.
Nimm einen einfachen Drucker und es klappt nicht. Das hängt vollkommen vom GDI Befehlsatz des Druckertreibers ab.

Zitat von Moony:
Wenn ich jedoch mit PrintBitmap es versuche zu zeichnen, wird das Bild richtig gedruckt, aber mit rosa Ecken.
Weil er Transparent nicht kennt und somit ganz normal zeichnet. Und wenn du rosa als Transparenzfarbe nimmst und die in die Ecken malst, malt er es so wieder, da er nichts weiss um die Besonderheit dieser Farbe.

Zitat von Moony:
Ich MUSS wegen des wechselnden Hintergrunds transparente Ecken zeichnen.
Dann mal mit Draw() oder Stretchdraw dieses Bild auf das Bild mit dem wechselnden Inhalt. Im Endeffekt hast du dann ein Bild ohne benutzte Transparenz, da die Transparenz beim Draw() entsprechend umgesetzt wurde.

Gruss
Yellow
  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 09:11 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