Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi inkompatible typen TBitmap TImage (https://www.delphipraxis.net/34643-inkompatible-typen-tbitmap-timage.html)

JCooper 25. Nov 2004 20:56


inkompatible typen TBitmap TImage
 
Hi,

was mache ich falsch???



Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Bit: TImage;
    Beenden: TButton;
    Button1: TButton;
    procedure MakeRed(Bit: TBitmap);
    procedure BeendenClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.MakeRed(Bit: TBitmap);
type
  PixArray = Array [1..3] of Byte;
var
  p: ^PixArray;
  h,w: Integer;
begin
  For h:=0 to Bit.Height-1 do
  begin
    p:= Bit.ScanLine[h];
    For w:=0 to Bit.Width-1 do
    begin
      p^[3]:=255;
      Inc(p);
    end;
  end;
end;

procedure TForm1.BeendenClick(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRed(Bit: TBitmap);
end;

end.
Fehlermeldung :

Inkompatible typen: 'TBitmap' 'TImage'




Bin Delphi Anfänger, also seid gnädig ;-))


grüße

supermuckl 25. Nov 2004 21:00

Re: inkompatible typen TBitmap TImage
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeRed(Bit.Picture.Bitmap);
end;

nailor 25. Nov 2004 21:00

Re: inkompatible typen TBitmap TImage
 
ein typecast geht so: NeuerTyp(altesDingen)

JCooper 25. Nov 2004 21:04

Re: inkompatible typen TBitmap TImage
 
schöenen dank,...

die Fehlermeldung ist weg,...

nur...

die Pixel werden nicht rot eingefärbt, sprich, die procedure wird nich ausgeführt...

:(


:oops:

supermuckl 25. Nov 2004 21:10

Re: inkompatible typen TBitmap TImage
 
probier mal folgendes:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  bit.picture.bitmap := Tbitmap.create;
  MakeRed(Bit.Picture.Bitmap);
end;
weis net obs daran liegt das das bitmap nochnicht existiert o.ä.

JCooper 25. Nov 2004 21:12

Re: inkompatible typen TBitmap TImage
 
hm,... ich hab das bild vorher in die Form geladen...

jetz verschwindet es beim klick auf den Button

:roll:

supermuckl 25. Nov 2004 21:15

Re: inkompatible typen TBitmap TImage
 
jo weil du es damit überschreibst mit einem neuen image..
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  bit.picture.bitmap := Tbitmap.create;
  bit.picture.bitmap.loadfromfile(filename und pfad der bmp datei);
  MakeRed(Bit.Picture.Bitmap);
end;
wenn es so weiter geht muss ichs selber mal testen *g*

JCooper 25. Nov 2004 21:24

Re: inkompatible typen TBitmap TImage
 
Vielen vielen dank,

es funktioniert

:mrgreen:


grüße

JCooper 25. Nov 2004 21:32

Re: inkompatible typen TBitmap TImage
 
wie bekomme ich es jetzt hin, dass ich über 3 radio buttons betimme, welchen der 3 Array werte ich ändern möchte... (Rot, Grün, Blau)

z.Zt ist es ja festgelegt auf 3

Code:
p^[3]:=255;

danke für die mühe

:thumb:

supermuckl 25. Nov 2004 21:38

Re: inkompatible typen TBitmap TImage
 
einfacher gehts mit der combobox als ItemList eingestellt
da kann man dann nach dem index die farbe setzen

Delphi-Quellcode:
var
farbe: integer;

als combobox:

farbe := combobox1.itemindex; // 0 ist das erste item
 p^[farbe+1]:=255;

oder als radio button:

if RadioButton1.checked then farbe := 1;
if RadioButton2.checked then farbe := 2;
if RadioButton3.checked then farbe := 3;

 p^[farbe]:=255;

JCooper 25. Nov 2004 21:54

Re: inkompatible typen TBitmap TImage
 
na das klappt ja wie am schnürchen,

was möchteste trinken?

:mrgreen:


danke

supermuckl 25. Nov 2004 22:01

Re: inkompatible typen TBitmap TImage
 
lol :)
np
ich zieh mir n pudding rein danke ;)

//edit
was mir da grad einfällt
das teil macht ja die einzelnen kanäle auf voll rot also 255
wenn du jetzt die rottöne z.b. nur ein wenig *verstärken* willst und nicht überschreiben willst, dann machste das so:

Delphi-Quellcode:
p^[3]:=255; <- rot komplett auf maximum setzen
-------------
p^[3]:=127; <- rot auf halbe kraft, aber du überzeichnest den roten kanal, und somit haste wenn du nur rot anschauen würdest, kein bild mehr sondern nur ne rote fläche
-------------
p^[3]:=round(p^[3]*0,5); <- so haste das bild noch korrekt, und die rottöne sind halbiert
-------------
p^[3]:=round(p^[3]*2);<-- verdoppelt usw.. ich weis jetzt nicht was rauskommt wenn es > 255 oder < 0 ist.. eventuell sowas unterbinden

JCooper 25. Nov 2004 22:23

Re: inkompatible typen TBitmap TImage
 
pudding, ... auch lecker :lol:

ja, macht voll rot, aber das bild erkenn ich trotzdem noch...da ja der grün und blau kanal noch den 'normalen' wert haben


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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-2025 by Thomas Breitkreuz