![]() |
Bitmap aus Array
Hallo,
In meinem
Delphi-Quellcode:
stehten Nullen und Einsen.
Array[1..50,1..50]of Byte
Wie kann ich nun aus meinem Array eine Bitmap erstellen. -Wenn im Array eine 1 steht, soll das gleichnamige Pixel(z.B. [1,12]) grau werden. -Wenn im Array eine 2 steht, soll das Pixel schwarz werden. -Die Bitmap soll, wie das Array 50x50 (oder variabel, wie das Array) groß sein. Also ich dachte mir, dass man mit einer for-Schleife kommt und innen dass für die Farben mit if-Schleifen. Aber ich hab keine Ahnung, wie man Pixel in einer Bitmap erstellt^^. P.S.: Die Forensuche ergab nichts dergleichen o.O |
Re: Bitmap aus Array
Wenn ich mich nicht irre, besitzt TBitmap die Methode SetPixel.
|
Re: Bitmap aus Array
*arrrggghhhh*
Zitat:
sowas gibt es nicht... :wink: |
Re: Bitmap aus Array
kannst es mit nem temporären TImage versuchen.
Delphi-Quellcode:
kannst dann ja die arrays in nen Hex-Code umwandeln, alle 3 Plätze gleichmachen und schon haste nen Grauton.
Image1.Canvas.Pixels[pos_x,pos_y] := $00202020;
pos_x & pos_y kannste auch vom array abhängig machen |
Re: Bitmap aus Array
Zitat:
Delphi-Quellcode:
Array[1..50,1..50]of boolean
|
Re: Bitmap aus Array
Delphi-Quellcode:
Nicht getestet.
type
TGrayArray = array of array of Byte; function MakeGray(values: TGrayArray): TBitMap; var x,y:Integer; begin Result := TBitmap.create; //erzeugen Result.Width := length(values); Result.height := length(values[0]); Result.Canvas.Brush.Color := clblack; Result.canvas.Rectangle(0,0,Result.Width,Result.Height); //schwarz färben for x := 0 to high(values) do for y := 0 to high(values[x]) do if y < Result.Width then begin Result.Pixels[x,y] := rgb(values[x,y],values[x,y],values[x,y]); //sehr langsam! scanline/GR32 ist besser! end else Break; //wir wollen nicht über die bitmapgrenzen hinaus malen end; |
Re: Bitmap aus Array
Übrigens, warum ein Array erstellen wenn man schon ein Bitmap hat ?
Dieses kann doch auch das Bitmap übernehmen ... nur mal so nebenbei. |
Re: Bitmap aus Array
Ausgangssituation war "habe Array", nicht "habe Bitmap". :gruebel:
EDIT: hier nochmal mit scanline, man will ja nicht kleinlich sein:
Delphi-Quellcode:
kompiliert, nicht getestet.
type
TGrayArray = array of array of Byte; function MakeGray(values: TGrayArray): TBitMap; var x,y:Integer; row: Pointer; begin Result := TBitmap.create; //erzeugen Result.Width := length(values); Result.height := length(values[0]); Result.Canvas.Brush.Color := clblack; Result.canvas.Rectangle(0,0,Result.Width,Result.Height); //schwarz färben for y := 0 to high(values[0]) do begin row := Result.ScanLine[y]; for x := 0 to high(values) do if (y < Result.Width) and (x < Result.Height) then TColor(Pointer(Integer(row)+x)^) := rgb(values[x,y],values[x,y],values[x,y]); end; end; |
Re: Bitmap aus Array
Wenn du es schon schnell haben willst, würde ich die if-Abfrage aus der Schleife rausnehmen und noch RGB ersetzen ;) .
Btw: Es ging nicht um Byte-Werte, sondern (0, 1, 2). Wenn ein So-Gut-Wie-Weiß reicht:
Delphi-Quellcode:
// values[i] sei für alle i gleichlang
function MakeGray(values: TGrayArray): TBitMap; var x, y: Integer; ptr: PCardinal; // 32bit begin Result := TBitmap.create; Result.Width := length(values); Result.height := length(values[0]); for y := 0 to high(values[0]) do begin ptr := Result.ScanLine[y]; for x := 0 to high(values) do begin ptr^ := $7F7F7F * values[x, y]; Inc(ptr); end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz