AGB  ·  Datenschutz  ·  Impressum  







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

BW Film Source

Ein Thema von freeway · begonnen am 30. Jul 2012 · letzter Beitrag vom 31. Jul 2012
Antwort Antwort
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#1

BW Film Source

  Alt 30. Jul 2012, 17:35
Vielleicht kann es der eine oder andere verwenden

Anhand der vorgegebenen "Farbe" wird ein graues Bild erzeugt

Delphi-Quellcode:
function BW_Film(Bild : TBitmap; hell,farbe : integer):boolean;
type TRGBArray = array[0..0] of TRGBTriple;
      PRGBArray = ^TRGBArray;

var x,y,r,g,b,summe,grau : integer;
    row : PRGBArray;
begin
  result := false;
  Bild.Pixelformat := pf32bit;
  r := GetRValue(farbe); //RGB Farben zuweisen
  g := GetGValue(farbe);
  b := GetBValue(farbe);

  summe := r + g + b; //Gesamtsumme bilden
  if summe = 0 then summe := 1; //Divide zero vermeiden

  for y := 0 to Bild.Height-1 do
    begin
      Row := Bild.Scanline[y];
      for x := 0 to Bild.Width - 1 do
        with row[x] do
          begin
            //grau anteilig ermitteln
            //farbwert / gesamtsumme = Anteil der einzelnen Farbe * tatsächlichen wert

            grau := round(r / summe * rgbtRed + g / summe * rgbtGreen + b / summe * rgbtBlue + hell);
            if grau > 255 then grau := 255; //Bereichscheck
            if grau < 0 then grau := 0;

            rgbtRed := grau; //neue Farbe zuweisen
            rgbtGreen := grau;
            rgbtBlue := grau;
          end;
    end;
  result := true;
end;
Miniaturansicht angehängter Grafiken
grey-1.jpg   grey-2.jpg  

Geändert von freeway (30. Jul 2012 um 22:37 Uhr) Grund: Fehler beseitigen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: BW Film Source

  Alt 30. Jul 2012, 17:48
Nur das man es so nicht verwenden kann.

Row ist nicht definiert
BMP0 ist nicht definiert
Bild wird nicht benutzt
hell, farbe doppelt definiert
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: BW Film Source

  Alt 30. Jul 2012, 18:10
Und wenn Bild keine 24 Bit pro Pixel besitzt, dann läuft es auch nicht.
$2B or not $2B
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#4

AW: BW Film Source

  Alt 30. Jul 2012, 18:30
ihr habt recht, sollte jetzt passen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: BW Film Source

  Alt 30. Jul 2012, 18:42
TRGBTriple?

TRGBTriple ist in jedem Delphi vorhanden? (in älteren hab ich jetzt noch nicht nachgesehn)
Hach, wie ich mir wünschen würde, wenn in der OH erwähnt würde, wann etwas eingeführt wurde, so wie man es vom MSDN kennen täte.

Tipp:
Delphi-Quellcode:
type
  TRGBArray = array[0..0] of TRGBTriple;
[0..0] hat eine besondere Bedeutung.
Delphi führt bei sowas nie eine Bereichsprüfungen durch, womit das quasi ein offenses statisches Array ergibt, welches mit 0 beginnt und kein Ende besitzt. (OK, unter Win32 ist bei 2 GB Schluß)
$2B or not $2B

Geändert von himitsu (30. Jul 2012 um 18:44 Uhr)
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#6

AW: BW Film Source

  Alt 30. Jul 2012, 19:51
>TRGBTriple ist in jedem Delphi vorhanden?

Ist kein direkter Bestandteil von Delphi sondern von Windows (SDK),
müsste Theoretisch mit weniger aktuellen Delphi (5 / 7 / 2009 / XE / XE2) oder Windows Versionen funktionieren

>unter Win32 ist bei 2 GB Schluß
JAIN, hängt davon ab wieviel Speicher am Stück freigegeben wird

Geändert von freeway (30. Jul 2012 um 20:01 Uhr)
  Mit Zitat antworten Zitat
madtom

Registriert seit: 24. Feb 2005
Ort: Hamburg
115 Beiträge
 
Delphi XE7 Professional
 
#7

AW: BW Film Source

  Alt 30. Jul 2012, 22:24
Ich bin ja nicht kleinlich, aber sollte eine Funktion nicht einen Rückgabe- bzw. Ergebnistyp haben?

function BW_Film(Bild : TBitmap; hell,farbe : integer); Gruß Thomas
Thomas
Delphi Programming
  Mit Zitat antworten Zitat
freeway

Registriert seit: 11. Jul 2009
57 Beiträge
 
Delphi XE Professional
 
#8

AW: BW Film Source

  Alt 30. Jul 2012, 22:38
np, wenn dann richtig
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: BW Film Source

  Alt 30. Jul 2012, 23:07
np, wenn dann richtig
Falsch!

Deine Funktion gibt nun entweder True zurück, oder nichts (es gibt eine Exception).

Fazit: Das ist eine Prozedur.
= Sinnlose Rückgabewerte sind nutzlos.
$2B or not $2B
  Mit Zitat antworten Zitat
grizzly

Registriert seit: 10. Dez 2004
150 Beiträge
 
Delphi XE4 Professional
 
#10

[OT]

  Alt 31. Jul 2012, 09:05
Zitat:
[0..0] hat eine besondere Bedeutung.
Delphi führt bei sowas nie eine Bereichsprüfungen durch
Seit wann das? In Delphi 6 bekomme ich da immer einen Range Check Error. Dann bleibt mir einerseits die Bereichsüberprüfung auszuschalten (dumme Idee während der Entwicklung), oder so einen Array selber zu definieren.

Gruß
Michael
  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 12:50 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