AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Grafik als screenshot
Thema durchsuchen
Ansicht
Themen-Optionen

Grafik als screenshot

Offene Frage von "Hartfrid Krause"
Ein Thema von Hartfrid Krause · begonnen am 20. Feb 2007 · letzter Beitrag vom 18. Mär 2007
Antwort Antwort
Seite 2 von 3     12 3      
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#11

Re: Grafik als screenshot

  Alt 4. Mär 2007, 13:39
Willst du selber was programmieren oder andere was programmieren lassen?

Also am einfachsten machst du dir ein zweites bitmap im speicher, auf dem jedes bundesland eine andere farbe hat. dann fragst du ab, welche farbe dieses bitmap an der mausposition hat und gibst den namen aus, der dieser farbe zugeornet ist.

nach dem motto
case speicherbitmap.canvas.pixels[mausposition.x,mausposition.y] of
clred: label1.caption := 'Bayern';
clblue: label1.caption := 'hessen';
cllime: label1.caption := 'Rheinland-Pfalz';
...
end;

zugegeben nicht gerade optimal...
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#12

Re: Grafik als screenshot

  Alt 4. Mär 2007, 18:33
Gute Idee, aber die Flächen der Bundesländer sind bereits farbig, je nach der stärlsten Fraktion der Wahl
Insofern geht es so nicht
gruß
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#13

Re: Grafik als screenshot

  Alt 4. Mär 2007, 21:24
Zitat von NamenLozer:
Also am einfachsten machst du dir ein zweites bitmap im speicher, auf dem jedes bundesland eine andere farbe hat. dann fragst du ab, welche farbe dieses bitmap an der mausposition hat und gibst den namen aus, der dieser farbe zugeornet ist.
@Hartfrid Krause: NamenLozer meint du könntest dir noch ein 2. Bild erstellen, diesmal aber mit verschiedenfarbigen Bundesländern und dann lädst du das Bild in den Speicher:

Delphi-Quellcode:
  private
    BildBundeslaender: TBitmap;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
   Pfad: AnsiString;
begin
  BildBundeslaender:= TBitmap.Create;
  Pfad:= 'FarbigeBundesländer.bmp';
  if FileExists(Pfad) then
    BildBundeslaender.LoadFromFile(Pfad);
end;

procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  label1.caption:= '';
  if (X <= BildBundeslaender.Width) and (Y <= BildBundeslaender.Height) then
    case BildBundeslaender.canvas.pixels[X, Y] of
      clred: label1.caption := 'Bayern';
      clblue: label1.caption := 'hessen';
      cllime: label1.caption := 'Rheinland-Pfalz';
      //...
    end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  BildBundeslaender.Free;
end;
Bis auf die Farben, sollten beide Bilder, also stärkste Fraktionen und farbige Bundesländer aber identisch sein.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#14

Re: Grafik als screenshot

  Alt 8. Mär 2007, 13:55
Das klappt bei mir noch nicht nach beiden Seiten.
Mit dem folgenden Zeilen werden die Bundesländer zwar unterschiedlich gefärbt, speichere ich sie ab, erhalte ich nur einen schwarz-weiße Kopie.
Mit der schwarz-weiß-Kopie komme ich nicht zum Anzeigen der Ländernamen (als Doublette im Speicher).
Delphi-Quellcode:
 uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  Tform1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure fromshow(sender:TObject);
    procedure paintbox1paint(sender:TObject);
    procedure einfaerben(sender:TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  form1: Tform1;
  var bitmap1:tbitmap;

  implementation

{$R *.dfm}

procedure tform1.fromshow(sender:TObject);
begin
 form1.Width:=7*screen.Width DIV 8;
 form1.Height:=19*screen.Height div 20;
 form1.Left:=(screen.Width-form1.Width) DIV 2;
 form1.Top:=(screen.Height-form1.Height) div 2;
 paintbox1.Height:=645;
 paintbox1.width:=486;
 paintbox1.Left:=(form1.Width-paintbox1.Width) div 2;
 paintbox1.Top:=(form1.Height-paintbox1.Height) div 2;
 paintbox1paint(sender);
end;

procedure tform1. paintbox1paint(sender:TObject);
begin
 Bitmap1 := TBitmap.Create;
 Bitmap1.LoadFromFile('laender.bmp');
 PaintBox1.Canvas.Draw(0,0,Bitmap1);
// Bitmap1.Free;
 einfaerben(sender);
end;

procedure tform1.einfaerben(sender:TObject);
Var farbe:tcolor;
 x,y:integer;
begin
   with canvas do
   with paintbox1 do
   begin
  brush.color:= clbackground; //NRW
  farbe:= pixels[X,Y];
  floodfill(paintbox1.Left+120,paintbox1.Top+260,farbe, fsborder);

   brush.color:= clskyblue; //RHPf
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+80,paintbox1.Top+400,farbe, fsborder);

   brush.color:= clblack; //Nieders
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+170,paintbox1.Top+150,farbe, fsborder);

   brush.color:= clred; //Hessen
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+130,paintbox1.Top+390,farbe, fsborder);

    brush.color:= clfuchsia; //BaWü
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+230,paintbox1.Top+500,farbe, fsborder);

    brush.color:= clmaroon; //Bayern
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+260,paintbox1.Top+450,farbe, fsborder);

   brush.color:=clgreen; //Saarland
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+60,paintbox1.Top+460,farbe, fsborder);

   brush.color:= claqua; //Schl.Holstein
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+200,paintbox1.Top+90,farbe, fsborder);

   brush.color:= clmoneygreen; //Bremen
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+154,paintbox1.Top+160,farbe, fsborder);
   floodfill(paintbox1.Left+150,paintbox1.Top+124,farbe, fsborder);

   brush.color:= clmedgray; //Mecklenburg Vorpomm
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+289,paintbox1.Top+150,farbe, fsborder);

   brush.color:= clappworkspace; //Brandenburg
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+350,paintbox1.Top+200,farbe, fsborder);

    brush.color:= clhotlight; //SachsenAnhalt
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+370,paintbox1.Top+370,farbe, fsborder);

    brush.color:= clyellow; //Sachsen
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+270,paintbox1.Top+270,farbe, fsborder);

   brush.color:= clpurple; //Thüringen
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+250,paintbox1.Top+320,farbe, fsborder);

   brush.color:= clolive; //Berlin
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+385,paintbox1.Top+200,farbe, fsborder);

    brush.color:= cllime; //Hamburg
   farbe:= pixels[X,Y];
   floodfill(paintbox1.Left+220,paintbox1.Top+115,farbe, fsborder);
  end;
 end;

procedure Tform1.Button2Click(Sender: TObject);
begin
  Bitmap1.Canvas.CopyRect(Rect(0, 0, Bitmap1.Width, Bitmap1.Height),
  PaintBox1.Canvas, Rect(0, 0, Bitmap1.Width, Bitmap1.Height));
  Bitmap1.SaveToFile('B.bmp');//wird jetzt überschrieben!
  bitmap1.free;
end;

procedure Tform1.Button1Click(Sender: TObject);
begin
  form1.close;
end;

end.
[edit=SirThornberry]Delphi-Tags gesetzt - nächstes mal bitte selbst machen. Mfg, SirThornberry[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: Grafik als screenshot

  Alt 8. Mär 2007, 19:13
Hallo,

hier ist ein Ausschnitt aus deinem Code:
Delphi-Quellcode:
procedure tform1. paintbox1paint(sender:TObject);
begin
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('laender.bmp');
PaintBox1.Canvas.Draw(0,0,Bitmap1);
// Bitmap1.Free;
einfaerben(sender);
end;
Also jedes mal wenn das Ereignis onPaint der Paintbox ausgelöst wird, lädst du das Bild nach meiner Ansicht immer wieder neu. Also den Code da oben würde ich löschen und dafür folgenden Code hinzufügen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('laender.bmp');
PaintBox1.Canvas.Draw(0,0,Bitmap1);
einfaerben(sender);
end;
Also einen Button hinzufügen und damit das Bild laden und nicht mit onPaint.

Folgendes ist mir auch noch aufgefallen, wieder Code von dir:
Delphi-Quellcode:
   
procedure tform1.einfaerben(sender:TObject);
Var farbe:tcolor;
x,y:integer;
begin
   with canvas do
   with paintbox1 do
   begin
Mit with canvas do zeichnest du auf den Canvas deiner Form und nicht auf die Paintbox, aber das kann natürlich von dir auch gewollt sein.

Ob damit das Problem gelöst ist, weis ich allerdings nicht.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#16

Re: Grafik als screenshot

  Alt 10. Mär 2007, 14:36
Es klappt immer noch nicht;
ich habe den quellcode minimal verändert, rufe paintbox nur direkt auf und erhalte beim Speichern nur einen schwarz weiße Kopie, obwohl die BRD zunächst farbig markiert wurde.
Liegt es an canvas-paintbox??
Hier noch einmal der quellcoe:
Delphi-Quellcode:
var
  form1: Tform1;
  var bitmap1:tbitmap;

  implementation

{$R *.dfm}

procedure tform1.fromshow(sender:TObject);
begin
 form1.Width:=7*screen.Width DIV 8;
 form1.Height:=19*screen.Height div 20;
 form1.Left:=(screen.Width-form1.Width) DIV 2;
 form1.Top:=(screen.Height-form1.Height) div 2;
 paintbox1.Height:=645;
 paintbox1.width:=486;
 paintbox1.Left:=(form1.Width-paintbox1.Width) div 2;
 paintbox1.Top:=(form1.Height-paintbox1.Height) div 2;
 paintbox1paint(sender);
end;

procedure tform1. paintbox1paint(sender:TObject);
begin
 Bitmap1 := TBitmap.Create;
 Bitmap1.LoadFromFile('laender.bmp');
 PaintBox1.Canvas.Draw(0,0,Bitmap1);
// Bitmap1.Free;
 einfaerben(sender);
end;

 procedure tform1.einfaerben(sender:TObject);
begin
   with canvas do
  // with paintbox1 do
   begin
  brush.color:= clbackground; //NRW
  floodfill(paintbox1.Left+120,paintbox1.Top+260,clblack, fsborder);

   brush.color:= clskyblue; //RHPf
   floodfill(paintbox1.Left+80,paintbox1.Top+400,clblack, fsborder);

   brush.color:= clblack; //Nieders
   floodfill(paintbox1.Left+170,paintbox1.Top+150,clblack, fsborder);

   brush.color:= clred; //Hessen
   floodfill(paintbox1.Left+130,paintbox1.Top+390,clblack, fsborder);

    brush.color:= clfuchsia; //BaWü
   floodfill(paintbox1.Left+230,paintbox1.Top+500,clblack, fsborder);

    brush.color:= clmaroon; //Bayern
   floodfill(paintbox1.Left+260,paintbox1.Top+450,clblack, fsborder);

   brush.color:=clgreen; //Saarland
   floodfill(paintbox1.Left+60,paintbox1.Top+460,clblack, fsborder);

   brush.color:= claqua; //Schl.Holstein
   floodfill(paintbox1.Left+200,paintbox1.Top+90,clblack, fsborder);

   brush.color:= clmoneygreen; //Bremen
   floodfill(paintbox1.Left+154,paintbox1.Top+160,clblack, fsborder);
   floodfill(paintbox1.Left+150,paintbox1.Top+124,clblack, fsborder);

  brush.color:= clmedgray; //Mecklenburg Vorpomm
   floodfill(paintbox1.Left+289,paintbox1.Top+150,clblack, fsborder);

   brush.color:= clappworkspace; //Brandenburg
   floodfill(paintbox1.Left+350,paintbox1.Top+200,clblack, fsborder);

    brush.color:= clhotlight; //SachsenAnhalt
   floodfill(paintbox1.Left+370,paintbox1.Top+370,clblack, fsborder);

    brush.color:= clyellow; //Sachsen
   floodfill(paintbox1.Left+270,paintbox1.Top+270,clblack, fsborder);

   brush.color:= clpurple; //Thüringen
   floodfill(paintbox1.Left+250,paintbox1.Top+320,clblack, fsborder);

   brush.color:= clolive; //Berlin
   floodfill(paintbox1.Left+385,paintbox1.Top+200,clblack, fsborder);

    brush.color:= cllime; //Hamburg
   floodfill(paintbox1.Left+220,paintbox1.Top+115,clblack, fsborder);
  end;
 end;

procedure Tform1.Button2Click(Sender: TObject);
begin
  Bitmap1.Canvas.CopyRect(Rect(0, 0, Bitmap1.Width, Bitmap1.Height),
  PaintBox1.Canvas, Rect(0, 0, Bitmap1.Width, Bitmap1.Height));
  Bitmap1.SaveToFile('B.bmp');//wird jetzt überschrieben!
  bitmap1.free;
end;

procedure Tform1.Button1Click(Sender: TObject);
begin
  form1.close;
end;

end.
[edit=Jelly]Nächstes mal die Code-Tags bitte selbs einfügen Mfg, Jelly[/edit]
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#17

Re: Grafik als screenshot

  Alt 10. Mär 2007, 16:58
Hallo,

du hast jetzt praktisch gar nichts geändert denn  with paintbox1 do war sowieso umsonst. Dann lieber so:
Delphi-Quellcode:
procedure tform1.einfaerben(sender:TObject);
Var farbe:tcolor;
x,y:integer;
begin
   with paintbox1.canvas do
   begin
Dein onPaint Ereignis hast du immer noch nicht abgeändert. Jedesmal wenn du floodfill() benutzt, wird 'DeutschUmriss.bmp' nach meiner Meinung immer wieder neu geladen. Daher kann ich nur auf meinen letzten Beitrag verweisen.
dein Code:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('DeutschUmriss.bmp');
PaintBox1.Canvas.Draw(0,0,Bitmap1);
Bitmap1.Free;
einfaerben(sender);
end;

Ich habe dir eine Demo angehängt, wo der gleiche Code von dir benutzt wird, jedoch anstatt der TPaintbox mit einem TImage. Beim TImage kannst du gleich auf den Canvas deines Bitmaps zeichnen.
Angehängte Dateien
Dateityp: zip hartfrid_krause_935.zip (207,5 KB, 3x aufgerufen)
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#18

Re: Grafik als screenshot

  Alt 12. Mär 2007, 20:18
an bitsetter
das mit den 2 bitmaps: die eine zum Färben, die andere mit degfinierten Farben zu abfragen ist eine gute Idee.
Doch wie kriege ich die beiden bitmaps so, dass ich abfragen kann.
Mit:
procedure tform54.paintbox2paint(sender:TObject);
begin
Bitmap2 := TBitmap.Create;
Bitmap2.LoadFromFile('laender.bmp');
paintbox2.Canvas.Draw(0,0,Bitmap2);
Bitmap2.Free;
faerben(sender);
end;
frage ich die Eingefärbte ab (durch faerben kommen die definierten Farben auf die Länder).
Mit
Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('DeutschUmriss.bmp');
PaintBox1.Canvas.Draw(0,0,Bitmap1);
Bitmap1.Free;

frage ich die n ach den Fraktionen einzufärbenmden ab.

Mit
paintbox2paint(sender);
label20.Show;
paintbox1paint(sender);
weiter(sender);
lade ich beiden - ich denke hier ist der Fehler
und nuin klappt die Zuordnung zu vordefinierten Farben zu Bundesländernamen nicht mehr

wo istz der fehler

danke und ciau
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Grafik als screenshot

  Alt 12. Mär 2007, 22:25
Hallo,

gedacht ist es eigentlich so, dass du die Bundesländer einmalig verschiedenfarbig mit der procedure einfaerben einfärbst und dann das Bild abspeicherst.

Dann kannst du das eingefärbte Bild mit Bitmap1.LoadFromFile laden und im onMouseMove Ivent der Paintbox kannst du dann die Farben des Bildes mit Bitmap1.canvas.pixels[X, Y] auslesen.

Delphi-Quellcode:

//onMouseMove Ivent der Paintbox
procedure TForm1.PaintBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin//Zuornung der Farben entsprechen der procedure einfaerben
  label1.caption:= '';
  case PaintBox1.canvas.pixels[X, Y] of//Farbe unter dem Cursor auslesen
  //case PaintBox2.canvas.pixels[X, Y] of
  //case Bitmap1.canvas.pixels[X, Y] of//oder Farbe vom Bitmap auslesen
    clbackground: label1.caption := 'NRW';
    clskyblue: label1.caption := 'RHPf';
    clblack: label1.caption := 'Nieders';
    clred: label1.caption := 'Hessen ';
    clfuchsia: label1.caption := 'BaWü ';
    clmaroon: label1.caption := 'Bayern ';
    clgreen: label1.caption := 'Saarland ';
    claqua: label1.caption := 'Schl.Holstein';
    clmoneygreen: label1.caption := 'Bremen ';
    clmedgray: label1.caption := 'Mecklenburg Vorpomm ';
    clappworkspace: label1.caption := 'Brandenburg';
    clhotlight: label1.caption := 'SachsenAnhalt';
    clyellow: label1.caption := 'Sachsen ';
    clpurple: label1.caption := 'Thüringen ';
    clolive: label1.caption := 'Berlin ';
    cllime: label1.caption := 'Hamburg ';
  end;
end;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Hartfrid Krause

Registriert seit: 20. Feb 2007
90 Beiträge
 
Delphi XE6 Professional
 
#20

Re: Grafik als screenshot

  Alt 13. Mär 2007, 15:27
Einfärben und Namen abfrtagen klappt;
Es klappt nicht, die Originalfarbige in den Arbeitsspeicher zu schaffen (wie???) und die mit dne Parteifarben einzufärbenden im Vordergrund zu haben.
die mit verschiedenen Farben (nur in den Arbeitsspeicher) zu ladende Datei heisst:

Bitmap2 := TBitmap.Create;
Bitmap2.LoadFromFile('bildbundeslaender.bmp');
paintbox1.Canvas.Draw(0,0,Bitmap2);
sie erhält dann unterschiedliche Farben.

Die Parteien bmp (alle gleiche Position und gleoiche Größe)
wird aufgerufen mit:


Bitmap1 := TBitmap.Create;
Bitmap1.LoadFromFile('laender.bmp');
paintbox2.Canvas.Draw(0,0,Bitmap1);
faerben(sender);

dann klappt das mit dem Mauszeiger drüberfahren nicht mehr

procedure TForm1.paintbox2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
// label1.caption:= '';
if (X <= paintbox2.Width) and (Y <= paintbox2.Height) then
case paintbox2.canvas.pixels[X, Y] of
clcream:label1.Caption:='Nordrhein-Westfalen';
$0005727A:label1.Caption:='Rheinland-Pfalz';
$006F6F11:label1.Caption:='Niedersachsen';
$00C551D9:label1.Caption:='Hessen';
...
end;
end;


Ohne die bitmap1 funktioniert die Darstellung und die Ländernamen.

Außerdem:
ih würde gerne den label1.caption dann jeweils an der Mausspitze haben, um den Ländernamen quasi "auf" dem Land zu haben, wenn ich drüberfahre

Wie das geht, weiss ich nicht


wer hilft??
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 15:40 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