AGB  ·  Datenschutz  ·  Impressum  







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

Farben ersetzen

Ein Thema von Jarmen_Kell · begonnen am 19. Mär 2005 · letzter Beitrag vom 25. Feb 2006
Antwort Antwort
Seite 1 von 3  1 23      
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#1

Farben ersetzen

  Alt 19. Mär 2005, 20:25
Hallo,
also ich weiß, die Frage ist mal wieder auf etwas tieferem Niveau, aber irgendwie komm ich nicht dahinter.
Die folgende Prozedur soll in einem Bestimmten Bereich auf einem TCanvas alle Pixel, die eine bestimmte Farbe haben, durch eine andere Farbe ersetzen.
Der Bereich wird durch MouseDown und MouseUp auf dem Image festgelegt.
Bei dieser Prozedur:

Delphi-Quellcode:
procedure Tmainform.colorchange;
var
  Ix,Iy:Integer;
begin
  for Ix:=moused.X to current.X do
    for Iy:=moused.Y to current.Y do
      if img.Canvas.Pixels[Ix,Iy]=pencolor
        then img.Canvas.Pixels[Ix,Iy]:=brushcolor;
end;
geht das ganze nur, wenn der Erste punkt, also der MouseDown-Punkt auf dem Canvas der OBEN LINKS ist.

ich habe dann folgendes geschrieben:

Delphi-Quellcode:
procedure Tmainform.colorchange;
var
  Ix,Iy:Integer;
  x1,x2,y1,y2:Integer;
begin
  if moused.X < current.X then x1:=moused.X else x1:=current.X;
  if moused.Y < current.Y then y1:=moused.Y else y1:=current.Y;
  if moused.X < current.X then x2:=current.X else x2:=moused.X;
  if moused.Y < current.Y then y2:=current.Y else y2:=moused.Y;
  for Ix:=x1 to x2 do
    for Iy:=y1 to y2 do
      if img.Canvas.Pixels[Ix,Iy]=pencolor
        then img.Canvas.Pixels[Ix,Iy]:=brushcolor;
end;
Das geht "natürlich" wunderbar, aber ich frage mich, warum die andere Version nicht funktioniert.
Wäre schön, wenn das jemand beantworten könnte.
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#2

Re: Farben ersetzen

  Alt 19. Mär 2005, 20:30
Vielleicht, weil die Schleifen u.U. in die falsche Richtung laufen? Btw würd ich Scanline verwenden - das ist im einiges schneller als Pixels

Dust Signs
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#3

Re: Farben ersetzen

  Alt 19. Mär 2005, 20:31
Es wird wohl an deiner For-Schleife liegen. Bei "for ... to ..." muss der erste Wert niedriger, als der zweite sein, sonst gehts nicht. Für die andere Variante gäbe es "for ... downto ...".

Meintest du das?

MfG Pr0g
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#4

Re: Farben ersetzen

  Alt 20. Mär 2005, 13:57
Hmm, ja ach so, ich wusste nicht, dass das nicht bei 'nem niedrigerem Wert automatisch runterzählt
also muss ich doch erstmal den kleineren ermitteln und dann.
Naja

Aber jetzt würde mich mal interessieren, was "scanline" ist ^^
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#5

Re: Farben ersetzen

  Alt 20. Mär 2005, 14:16
Zitat von Jarmen_Kell:
Aber jetzt würde mich mal interessieren, was "scanline" ist ^^
Mit Scanline kannst du wie mit Pixels auf die einzelnen Pixel zugreifen, nur das es um einiges schneller ist. Aber da solltest du mit der Boardsuche genug finden können
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#6

Re: Farben ersetzen

  Alt 21. Mär 2005, 11:20
hmm ja, jetzt hab ich mich da n bisserl eingelesen und hab auch schon allerlei an Source gefunden, aber wie es scheint, geht das nur mit TBitmaps?!?
Also ich brauch' das ganze zumindest letztendlich für'n Canvas.
Und einfach umschreiben scheint nicht so ganz zu klappen

Naja bestimmt gehts doch ganz einfach, aber ich komm' nicht drauf und bin ja auch noch recht "neu" ^^

Also, kann mir jemand das ganze für'n Canvas erklären?
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#7

Re: Farben ersetzen

  Alt 21. Mär 2005, 13:17
Wenn du Pixelweise mit Canvas drauf zugreifen willst, wird es im Gegensatz zu Scanlein sehr langsam.

Welches Bildformat willst du denn sonst nehmen, wenn nicht TBitmap?
  Mit Zitat antworten Zitat
Jarmen_Kell

Registriert seit: 17. Mär 2005
188 Beiträge
 
#8

Re: Farben ersetzen

  Alt 21. Mär 2005, 18:12
hmm naja wie gesagt, das ist ein TImage und auf dem Canvas wird herumgemalt.
Ist also Quasi ne Art Paint.
Und diese Farb-Wechsel-Funktion ist mir eingefallen, und dann wollt' ich die eben auch noch einfügen
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Farben ersetzen

  Alt 21. Mär 2005, 18:22
Du solltest eigentlich alle Zeichenoperationen auf einem Bitmap durchführen und dessen Inhalt dann im OnPaint in eine Paintbox kopieren. Das ist der Performance-beste Weg, nicht zuletzt eben wegen Scanline.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Pr0g
Pr0g

Registriert seit: 21. Mai 2004
809 Beiträge
 
Delphi 7 Personal
 
#10

Re: Farben ersetzen

  Alt 21. Mär 2005, 18:22
Aufs Canvas des Image solltest du nicht zeichnen. Zeichen auf ein ein Bitmap (bzw. dessen Canvas). Dann hast du auch wieder Scanline.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 18:52 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