[patch] 02_RSS.pm - neuer Befehl zum Zeichnen von Rechtecken mit u. ohne Füllung

Begonnen von betateilchen, 10 April 2014, 19:34:05

Vorheriges Thema - Nächstes Thema

betateilchen


rgb { return "7F7F7F"; } # grau
rect 100 100 200 200


liefert:

(http://up.picr.de/17920775sw.jpg)





rgb { return "7F7F7F"; } # grau
rect 100 100 200 200 1


liefert (aufgrund des zusätzlichen "Füllen"-Parameters):

(http://up.picr.de/17920798kr.jpg)




Ich brauche die Funktion, um z.B. hinter SVG plots eine vernünftige Hintergrundfarbe legen zu können, damit die Schrift besser lesbar wird, als auf der schwarzen Grundfarbe des RSS, wenn man kein Hintergrundbild definiert.

Vorgeschlagener Patch (Doku fehlt noch):


Index: 02_RSS.pm
===================================================================
--- 02_RSS.pm (Revision 5503)
+++ 02_RSS.pm (Arbeitskopie)
@@ -384,6 +384,13 @@
   $S->line($x1,$y1,$x2,$y2,RSS_color($S,$params{rgb})); 
}

+sub
+RSS_itemRect {
+  my ($S,$x1,$y1,$x2,$y2,$format,%params)= @_;
+  $S->filledRectangle($x1,$y1,$x2,$y2,RSS_color($S,$params{rgb})) if $format; 
+  $S->rectangle($x1,$y1,$x2,$y2,RSS_color($S,$params{rgb})) if !$format; 
+}
+
##################
sub
RSS_evalLayout($$@) {
@@ -495,6 +502,11 @@
             ($x2,$y2)= RSS_xy($S, $x2,$y2,%params);
             $format //= 1; # set format to 1 as default thickness for the line
             RSS_itemLine($S,$x1,$y1,$x2,$y2, $format,%params);
+          } elsif($cmd eq "rect") {
+            ($x1,$y1,$x2,$y2,$format)= split("[ \t]+", $def, 5);
+            ($x1,$y1)= RSS_xy($S, $x1,$y1,%params);
+            ($x2,$y2)= RSS_xy($S, $x2,$y2,%params);
+            RSS_itemRect($S,$x1,$y1,$x2,$y2, $format,%params);
           } elsif($cmd eq "time") {
             ($x,$y)= split("[ \t]+", $def, 2);
             ($x,$y)= RSS_xy($S, $x,$y,%params);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Hier ein Ergebnis aus der praktischen Anwendung:

(http://up.picr.de/17920944am.jpg)

Das Ganze ohne Rechteck:

(http://up.picr.de/17920978fn.jpg)

(unschön)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

Hallo Boris,

wenn Du dann grade dabei bist, kannst Du Dir bitte mal diese Stelle im Coding anschauen?


  my $S;
  # let's create a blank image, we will need it in most cases.
  $S= GD::Image->newTrueColor($width,$height);
  $S->colorAllocate(0,0,0); # black is the background


Völlig egal, was man dort im colorAllocate angibt, der Hintergrund ist immer schwarz. Selbst wenn das colorAllocate komplett fehlt.
Ich möchte gerne eine Möglichkeit schaffen, die Hintergrundfarbe (ohne Hintergrundbild!) z.B. per neuem Attribut bgcolor definieren zu können, aber solange ich das Geheimnis des Setzen der Hintergrundfarbe nicht entschlüsselt habe, komme ich da nicht weiter.

(mir ist schon klar, dass ich das auch über die Rechteckfunktion lösen kann)


erledigt - siehe die folgenden Beiträge.

Danke & viele Grüße
Udo
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

So funktioniert es mit der Hintergrundfarbe, falls das erste colorAllocate() nicht zuverlässig funktioniert (das scheint ein bekanntes Problem zu sein):


  #
  # create the image
  #
  my $S;
  # let's create a blank image, we will need it in most cases.
  $S= GD::Image->newTrueColor($width,$height);
  my $red = $S->colorAllocate(255,0,0);
  $S->fill(0,0,$red);
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

und so funktioniert es mit der per Attribut "bgcolor" einstellbaren Hintergrundfarbe :)


  my $S;
  # let's create a blank image, we will need it in most cases.
  $S= GD::Image->newTrueColor($width,$height);
  my $bgcolor = AttrVal($name,'bgcolor','000000'); #default bg color = black
  $bgcolor = RSS_color($S, $bgcolor);
  $S->fill(0,0,$bgcolor);


(http://up.picr.de/17922613ho.png)

(http://up.picr.de/17922616tn.jpg)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Dr. Boris Neubert

Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

sieht gut aus...

Kommt das auch noch? http://forum.fhem.de/index.php/topic,20920.0.html

Viele Grüße
Udo
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!