Avatar billede zerohero Nybegynder
21. marts 2001 - 08:40 Der er 21 kommentarer og
2 løsninger

OpenGL & Bitmaps

Hejsa igen allesammen.

Forstil jer at jeg har en Tform der er dækket med en stor Tbitmap (ca.1024x768 pixels) mens en mindre Tbitmap (ca. 125x125 pixels)svæver rundt via en Ttimer. Den lille Tbitmap skal dog være halvt transparent så man svagt kan se den store Tbitmap gennem den lille. Til det bruger jeg:

for x := 0 to Tbitmap.width do
for y := 0 to Tbitmap.height do
//aflæser RGB farver på den store Tbitmaps
r := getrvalue(Tbitmap.canvas.pixels[x,y]);
g := getgvalue(Tbitmap.canvas.pixels[x,y]);
b := getbvalue(Tbitmap.canvas.pixels[x,y]);
r := r-150; g := g-150; b := b-150;
//Farver den lille Tbitmap
Tbitmap.canvas.pixels[x,y] := rgb(r,g,b);

I teorien skulle dette køre fint. Det gør det sådan set også... men det går bare alt for langsomt!!! Så jeg tænkte om man kunne gøre noget lign. med OpenGL - da jeg ved at den er hurtig til at håndtere grafik. Problemet er bare at jeg ikke kender så meget til fremvisning af \"flade\" Tbitmaps med OpenGL (da jeg kun kender til 3D siden af OpenGL).

PROBLEMSTILLING:

1. Hvordan viser man en Tbitmap på en Tform via OpenGL (ikke noget med 3D!!!).

2. Hvordan kan man gøre en Tbitmap halvt transparent så man kan se andre Tbitmaps under via OpenGL (ikke noget med 3D!!!) på en hurtigt måde så det ikke kræver så mange resourcer.

på for hånd 1000 tak :-)

ZeroHero
Avatar billede martinlind Nybegynder
21. marts 2001 - 08:55 #1
har du kigget på www.melander.dk han har en TBitmap comp. der er ret fed, måske han også har noget om openGL.
Avatar billede martinlind Nybegynder
21. marts 2001 - 09:05 #2
Drop en mail så her jeg et lille demo med source

/Martin
Avatar billede pellelil Nybegynder
21. marts 2001 - 09:09 #3
Når/hvis du behandler et bitmap så skal du ALDRIG gøre dette via pixel da dette altid vil tage \"7 år og en madpakke\", brug i stedet \"scanline\" da dette er væsentligt hurtigere.

Hvor kommer OpenGL ind i spørgsmålet? di skriver ikke noget om at det du i dag bruger har noget med OpenGL at gøre, og i såfald hvorledes? Hvis du alligevel ikke bruger OpenGL så vil jeg i dette tilfælde råde dig til at kigge i andre retninger da jeg har det opfattelse at OpenGL er bedre til 2D/3D frem for \"BMP behandling\". Jeg har selv for et par mdr. siden kigget på en del forsk. freeware/opensource grafik biblioteker som jeg tror ville være gavnlige i dette sammenhæng. Rent faktisk synes jeg at kunne huske at et af eksemplerne netop var en semi-transparent BMP. Desværre kan jeg ikke på stående fod huske hvad det var for et \"produkt\", og endvidere har jeg dem ikke lige ved hånden. MEN: jeg er rimeliglig sikker på at Graphi32 kan løse dit problem (jeg vil ikke afvist at \"det er den\"): http://www.geocities.com/den_alex/
Avatar billede martinlind Nybegynder
21. marts 2001 - 09:18 #4
Pellelil >> Det var vist løsningen på de problemmer, \"ser sødt ud\".
Avatar billede pellelil Nybegynder
21. marts 2001 - 09:22 #5
Que ??
Avatar billede martinlind Nybegynder
21. marts 2001 - 09:26 #6
jeg var lige oppe og kigge på dit link.
Avatar billede pellelil Nybegynder
21. marts 2001 - 09:52 #7
martinlind> Nåh så\'n at forstå :-)

zerohero> Jeg har selv lige prøvet at hente og installere Graphic32 og det var lige nøjagtig denne her at jeg tænkte på. Prøv eksemplet \"ImageView_Layers_Ex\". Start med at vælge: \"File-Load\" og load et stort (evt. 1024x768) baggrundsbillede. Dernæst vælger du \"Layers->New Bitmap Layer\", hvor du loader et mindre billede (eksempelvis dit 125x125). I skærmen højre side tager du fat i slideren til \"Opacity\" hvor du justere denne lidt ned...
Avatar billede pellelil Nybegynder
21. marts 2001 - 09:55 #8
Prøv i stedet \"Sprite_Ex\" exemplet - det er lige det du efterlyser (dog med 50 \"sprites\" på samme tid, hvor du kun har brug for en).
Avatar billede martinlind Nybegynder
21. marts 2001 - 09:58 #9
pellelil >> æv hvordan fik du hul igennem til at download, min hænger og får ikke forbindelse.
Avatar billede pellelil Nybegynder
21. marts 2001 - 09:59 #10
Jeg prøvede bare igen, da jeg også fik fejl første gang :-)

Skriv din email adresse så skal jeg gerne maile de +900 KB til dig
Avatar billede martinlind Nybegynder
21. marts 2001 - 10:04 #11
Fedt, jeg kan simpelthen ikke komme igennem.

martin@e-lind.dk

/Martin
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:12 #12
Martin Lind>> Min mail adresse er:
info@electronicbugs.org

Pellelil>> Hvodan kunne jeg bare vide at du ville reagere på denne spørgsmål!!! *GG*.

1. Du snakker noget om scanline. Hvordan kan jeg bruge scanline i den situation jeg er i???

2. Du spørger hvor OpenGL kommer ind i billedet. Det jeg mener er at jeg gerne vil have OpenGL til at behandle min 2D grafik. Men jeg ved ikke hvordan man eks. loader bitmaps og anvender dem med OpenGL.

3. Jeg glæder mig til at se på Graphic32....
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:17 #13
Pellelil>> Jeg har også problemer med at downloade Graphic32... så hvis du gider at sende mig componenten ville det være supert!!!
Avatar billede martinlind Nybegynder
21. marts 2001 - 10:21 #14
Zerohero >> jeg har sendt begge..
Avatar billede martinlind Nybegynder
21. marts 2001 - 10:34 #15
ZeroHero >> Jeg får din mail retur med ukendt adr.
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:36 #16
Hvad??? ok, så prøv at sende den til
lambek@hotmail.com

...
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:37 #17
Du behøver ikke at bruge hotmail adressen...
jeg har modtaget din mail nu...

1000 TAK!!!
Avatar billede martinlind Nybegynder
21. marts 2001 - 10:40 #18
Ok, mystiken breder sig, jeg en return med besked om at adr. ikke kunne resolves......

Men så sender jeg ikke mere.
Avatar billede pellelil Nybegynder
21. marts 2001 - 10:41 #19
zerohero> Jeg har rodet lidt med OpenGL, men aldrig sammen med Bitmaps (jeg har lavet 2D streg grafik med OpenGL). Når vi taler ren BMP graphic så ville jeg foretrække at bruge noget som \"Graphic32\".

Da du ikke selv ville kigge i Delphi\'s hjælp efter scanline, så har jeg gjort det for dig, og nedenstående har du eksemplet :-)

<SNIP>
procedure TForm1.Button1Click(Sender: TObject);

// This example shows drawing directly to the BitMap
var
  x,y : Integer;
  BitMap : TBitMap;
  P : PByteArray;
begin
  BitMap := TBitMap.create;
  try
    BitMap.LoadFromFile(\'..\\Images\\Splash\\256color\\factory.bmp\');
    for y := 0 to BitMap.height -1 do
    begin
      P := BitMap.ScanLine[y];
      for x := 0 to BitMap.width -1 do
        P[x] := y;
    end;
  Canvas.draw(0,0,BitMap);

  finally
    BitMap.free;
  end;
end;
</SNIP>

Jeg kan ikke forklare hvorfor der er så stor forskel på Pixel og Scanline, men kan blot konstatere at det bliver værsentligt hurtigere når du bruger scanline. Dov vil jeg råde dig til at bruge Graphic32 i stedet for da dette sikkert i sidste ende vil være det hurtigste.
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:49 #20
Martin Lind>> Det vil sige at det var Pelle\'s mail med Graphic32 jeg modtog. Så den demo du nævnte tidligere må du gerne prøve at sende til min hotmail adresse - hvis du gider :-)...

I skal begge have 1000 tak for jeres uundværlige
hjælp... I er guder :-)... I har ærligt fortjent jeres points...

Pellelil>> hvis du har tid kunne du ikke lige lave et eksempel med scanlines som kan det samme som min canvas.pixels kode...
Avatar billede zerohero Nybegynder
21. marts 2001 - 10:50 #21
Pellelil>> ok - kom for sent *GG*
Avatar billede pellelil Nybegynder
21. marts 2001 - 12:14 #22
Øhh hvor kom jeg for sent? er det scanline eksemplet ?
Avatar billede pellelil Nybegynder
21. marts 2001 - 20:26 #23
Her er der et alternativer til Graphic32 kaldet \"FastLib\": http://gfody.com/

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester