hi,
hab ein kleines Programm geschrieben, das ein Bild in die Image- Komponente
läd und über canvas die Farbwerte der Pixel zurückgibt. Bloß kann ich die
ursprüngliche Pixelfarbe aber nicht ändern!!
Das Bild in der Image-Komponente ist doch unabhängig von dem Attributen von
dem ursprünglichen Bild, oder?? ALso schreibgeschützt ist es nicht!
Woran könnte das liegen???
mfg the-mod
Programmieren - alles kontrollieren 4.941 Themen, 20.712 Beiträge
Fehlermeldung?
Das Bild in der Image-Komponente ist doch unabhängig von dem Attributen von
dem ursprünglichen Bild, oder?? ALso schreibgeschützt ist es nicht!
Das gelade Bitmap kann natürlich vollkommen unabhängig von der Quelldatei manipuliert werden...
Gruß
Borlander
PS: Da Du etwas von TCanvas schreibst geht ich davon aus das Du die Pixels-Eigenschaft nutzt, bei umfangreicheren Bildmanipulationen würde ich aus Geschwindigkeitsgründen umbedingt TBitmap.ScanLine verwenden (das ist zwar geringfügig aufwendiger zu implementieren, aber signifikant schneller)...
hi,
Kommt keine Fehlermeldung. Werte werden auch korrekt zurückgegeben.
Werd mir mal das mit Tbitmap anschauen...
bis denne
Also das kann ich jetzt nicht direkt mit Deiner Urpsrungsproblematik in Zusammenhang biringen :-|
Hi,
Hab halt ein schwarz-weiß Bild für den Anfang genommen, da sollte dann schwarz mit weiß übermalt werden und weiß mit schwarz. Zur kontrolle habe ich eingestellt, dass wenn der pixel weiß oder schwarz ist, der hintergrund der form rot oder gelb wird - so hab ich kontrolliert ob was rauskommt, dass hat ja auch funktioniert!!
Aber mein Fehler war, dass ich 2 If-Bedingungen genommen habe, die sich selber rückgängig gemacht haben, da die Erste nach schwarzen Pixel ausschau gehalten hat und die zweite nach weißen, aber beide waren immer beim gleichen Pixel. D.h. die erste Bedingung macht den schwarzen Pixel weiß und die zweite machen den weißen wieder schwarz.
Mein Problem jetzt, wie soll ich die Bedingung stellen???
Mit einer IF-B. und schwarz/weiß als Farben wäre es einfach, da könnte man ja schreiben IF ...=clblack=true then ...=clwhite else ...=clblack
Aber bei mehreren Farben wirds ja dann kompliziert. Und mehrere Farben will ich ja noch miteinbauen.
Case wäre auch noch was, habe aber keine Ahnung wie man formulieren könnte (case ???? of)
mfg the mod
Mit case...of wäre natürlich möglich, nur ist dann hier zu bedenken das dann bei jedem Pixel eine größere Anzahl von Vergleichsoperationen notwendig ist...
Ideal wäre natürlich eine einfach Funktion die ausschließlich mit int-Werten arbeitet oder eine Manipulation mit bitweisen Operationen und einer Bitmaske (das würde sich bei der Invertierung von 1Bit Bitmaps anbieten)...
Das ganze hängt also auch etwas davon ab wie die Farben manipuliert werden sollen...
Gruß
Borlander
hi,
hab gerade keine Zeit zu posten, aber heute nacht wieder...
the mod
hi,
Kann jetzt jeden Pixel manipulieren, aber nur mit bmps und mit bis zu 16 Farben!!
Jpgs ging irgendwie nicht, und bei mehr Farben erfordert es genaue Details über die verschiedenen Farben!
Habe eine einfache IF Bedingung um die Farbe Pixel für Pixel zu ändern.
Dauert bei Größeren Bilder ziemlich lange und belastet - 100% CPU Auslastung für mehrere Sekunden!!
Aber es geht :-)
Danke für dein Interesse...
mfg the mod
Nabend
Dauert bei Größeren Bilder ziemlich lange und belastet - 100% CPU Auslastung für mehrere Sekunden!!
Arbeitest Du immer noch mit Pixels oder schon mit ScanLine?
Falls es mit ScanLine immer noch so lange dauert dann solltest über eine verbesserung des Algorithmus nachdenken - ggf. mit Inline-ASM arbeiten (wobei ein optimaler Object-Pascal Code nicht zwangsläufig langsamer sein muß - zumindest nicht messbar, bei ASM wird man i.d.R. allerdings automatisch effizenten Code produzieren)...
Jpgs ging irgendwie nicht
Wie gingen die nicht?
Hat sich im Bild nichts geändert? Wäre kein Wunder da die Standardpalette vor allem die Farbkanalwerte 255 nutzt, bei der JPG-Kompression werden jedoch Abweichungen von durchschnittswerten verwendet und daher dürfte dieser Extremwerthöchstens bei einfarbigen Flächen mit der entsprechenden Farbe auftauchen...
und bei mehr Farben erfordert es genaue Details über die verschiedenen Farben!
Da wirst Du um die Manipulation mit einer Funktion die eine neue (Farbkanal)Farbe in Abhängigkeit von der ursprünglichen (Farbkanal)Farbe zurückgibt nicht herumkommen...
Gruß
Borlander
ich habs imme noch mit pixels??
Was ist asm???
JPGs konnte ich nicht laden!!
Keine Ahnung warum.
Habe ein opendialog verwendet und den Filter auf bmp und jpg gesetzt!!
Sag mal bist du von Beruf Programmierer??
Du kennst nämlich dich richtig gut aus!!
mfg the mod
Dann wundert's mich nicht das das so lange dauert ;-)
Was ist asm???
ASM wird als Abkürzung für Assembler verwendet, das ist eigentlich nichts weiter als Symbolischer (die opcodes und Register werden mit Zeichenketten bezeichnet - man damit also relativ bequem auf unterster Hardwareebene programmieren) Maschinencode...
JPGs konnte ich nicht laden! [...] opendialog verwendet und den Filter auf bmp und jpg gesetzt!!
Das sollte aber ohne Probleme funktionieren:
if(Execute())
then Image1.Picture.LoadFromFile(FileName);
Sag mal bist du von Beruf Programmierer??
Du kennst nämlich dich richtig gut aus!!
Danke :-)
Beruflich programmiere ich aktuell allerdings nicht...
Gruß
Borlander