AGB  ·  Datenschutz  ·  Impressum  







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

Bitmap aus Array

Ein Thema von fLaSh11 · begonnen am 18. Jun 2006 · letzter Beitrag vom 18. Jun 2006
Antwort Antwort
fLaSh11
(Gast)

n/a Beiträge
 
#1

Bitmap aus Array

  Alt 18. Jun 2006, 13:47
Hallo,

In meinem Array[1..50,1..50]of Byte stehten Nullen und Einsen.
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Bitmap aus Array

  Alt 18. Jun 2006, 13:52
Wenn ich mich nicht irre, besitzt TBitmap die Methode SetPixel.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Bitmap aus Array

  Alt 18. Jun 2006, 14:02
*arrrggghhhh*
Zitat:
if-schleifen


sowas gibt es nicht...
  Mit Zitat antworten Zitat
Yahibanez

Registriert seit: 18. Jun 2006
3 Beiträge
 
#4

Re: Bitmap aus Array

  Alt 18. Jun 2006, 14:05
kannst es mit nem temporären TImage versuchen.

Image1.Canvas.Pixels[pos_x,pos_y] := $00202020; kannst dann ja die arrays in nen Hex-Code umwandeln, alle 3 Plätze gleichmachen und schon haste nen Grauton.
pos_x & pos_y kannste auch vom array abhängig machen
  Mit Zitat antworten Zitat
Flo85

Registriert seit: 25. Apr 2006
23 Beiträge
 
#5

Re: Bitmap aus Array

  Alt 18. Jun 2006, 16:42
Zitat von fLaSh11:
Hallo,

In meinem Array[1..50,1..50]of Byte stehten Nullen und Einsen.
-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.
wenn du nur grau und schwartz hast kanste doch Boolean nehmen
Array[1..50,1..50]of boolean
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Bitmap aus Array

  Alt 18. Jun 2006, 16:57
Delphi-Quellcode:
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;
Nicht getestet.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: Bitmap aus Array

  Alt 18. Jun 2006, 18:36
Übrigens, warum ein Array erstellen wenn man schon ein Bitmap hat ?
Dieses kann doch auch das Bitmap übernehmen ... nur mal so nebenbei.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Bitmap aus Array

  Alt 18. Jun 2006, 18:46
Ausgangssituation war "habe Array", nicht "habe Bitmap".

EDIT: hier nochmal mit scanline, man will ja nicht kleinlich sein:

Delphi-Quellcode:
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;
kompiliert, nicht getestet.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

Re: Bitmap aus Array

  Alt 18. Jun 2006, 19:11
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;
Sebastian
Moderator in der EE
  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 14:36 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