Autor Beitrag
[r2d2]
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: So 09.11.03 04:17 
Hi
Ich habe zwei Fragen:
1.
Wie kann man sich eine Graustufen-Bitmap erstellen? Ich meine nicht den Durchschnittswert der RGB-Werte zu berechnen, sondern wirklich eine Bitmap mit nur einem Kanal, die dann auch nur ein drittel des Speichers einer RGB-Bitmap belegt.
2.
Kann man den Zugriff auf die Pixel einer Bitmap irgendwie beschleunigen? Bei Photoshop z.B. gehen Pixelveränderungen ja sehr schnell. Ich krieg eine einfache Abdunklung einer Bitmap in nicht annähernd der Geschwindigkeit hin und so viel kann ich da ja auch nicht anders machen, oder? :shock:

thx
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: So 09.11.03 11:36 
zu. 2. wie machast du denn es jetzt? CanvasPixel ist am langsamsten, scanline ist da schon schneller. Wenn du auf die scanline so wie hier: www.efg2.com/Lab/Ima...ine.htm#Optimization zugreifst, holst du nochmal was raus.

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
[r2d2] Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 109

WinXP
D5 Enterprise
BeitragVerfasst: Di 11.11.03 00:53 
Ich nehm bis jetzt CanvasPixels. Aber wenns anders schneller geht dann schreib ich mein Prog eben um.
Und kennt jemand ne Atwort auf Frage Nr.1? Die wär auch noch wichtig :roll:
Phantom1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 390



BeitragVerfasst: Di 11.11.03 10:31 
Zu Frage 1 müsste folgendes reichen:

ausblenden Delphi-Quelltext
1:
  Bmp.PixelFormat:=pf8bit;  // Bmp ist ein TBitmap					


Zu Frage 2, habe ich hier mal ein beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
Procedure TForm1.BmpGreyScale(Bmp: TBitmap);
Type
  TRGB = Packed Record b, g, r: Byte End;
Var
  PRGB: ^TRGB;
  x,y: Integer;
  m: Byte;
Begin
  Bmp.PixelFormat:=pf24bit;
  For y := 0 to Bmp.Height-1 Do Begin
    PRGB:=Bmp.ScanLine[y];
    For x := 0 to Bmp.Width-1 do begin
      m:=(PRGB^.r+PRGB^.g+PRGB^.b) Div 3;
      PRGB^.r:=m;
      PRGB^.g:=m;
      PRGB^.b:=m;
      Inc(PRGB);
    End;
  End;
End;