Ooops
March 05, 2021, 07:27:10 AM

Author Topic: [bb] Transparent TGA (Load/Draw) by Baystep Productions [ 1+ years ago ]  (Read 504 times)

Offline BlitzBot

Title : Transparent TGA (Load/Draw)
Author : Baystep Productions
Posted : 1+ years ago

Description : I dunno about speed or nothing but it seemed to work fine for my purposes. This is for Blitz3D. It draws directly onto whatever buffer is set. I would like credit please.

Usage is...
Global myImage.TGAImage = LoadTGAImage("test.tga"[,blend])
DrawTGAImage(myImage,x%,y%,alpha#,[use alpha? True])
FreeTGAImage(myImage)

Blend modes are...
-1 = Subtractive (harsh)
0 = Multiply (recommended)
1 = Additive (harsh)


Code :
Code: BlitzBasic
  1. ;CREATED BY CHRIS PIKUL
  2. ;----------------------
  3.  
  4. Type TGAImage
  5.         Field file$,width%,height%,depth%,IMGBank,RGBImg,blend%
  6. End Type
  7. Global tga.TGAImage
  8.  
  9. Function LoadTGAImage.TGAImage(file$,blend%=0)  ;Blend: -1=Sub 0=Multiply 1=Additive
  10.         img = ReadFile(file$)
  11.         If Not img Then RuntimeError("Could not load specified image!")
  12.         Local idlen%=ReadByte(img)
  13.         Local clrmap%=ReadByte(img)
  14.         Local imgtyp%=ReadByte(img)
  15.         Local cm_index%=ReadShort(img)
  16.         Local cm_length%=ReadShort(img)
  17.         Local cm_entsize%=ReadByte(img)
  18.         Local img_xorg%=ReadShort(img)
  19.         Local img_yorg%=ReadShort(img)
  20.         Local img_width%=ReadShort(img)
  21.         Local img_height%=ReadShort(img)
  22.         Local img_depth%=ReadByte(img)
  23.         Local img_desc%=ReadByte(img)
  24.         Local img_info$=""
  25.         If idlen%<>0 Then
  26.                 For i=1 To idlen%
  27.                         img_info$=img_info$+Chr$(ReadByte(img))
  28.                 Next
  29.         EndIf
  30.         Local cm_data$=""
  31.         If clrmap%<>0 Then
  32.                 For i=1 To cm_entsize%*cm_length%
  33.                         cm_data$=cm_data$+Chr$(ReadByte(img))
  34.                 Next
  35.         EndIf
  36.         tga.TGAImage = New TGAImage
  37.         tgaIMGBank = CreateBank((4*img_width%)*(4*img_height))
  38.         tgaRGBImg = CreateImage(img_width%,img_height%)
  39.         tgawidth%=img_width%
  40.         tgaheight%=img_height%
  41.         tgadepth%=img_depth%
  42.         tgalend%=blend%
  43.         intwrite=0
  44.         SetBuffer ImageBuffer(tgaRGBImg)
  45.         LockBuffer
  46.         For y=img_height%-1 To 0 Step -1
  47.                 For x=0 To img_width-1
  48.                         If img_depth%=32
  49.                                 pix%=ReadInt(img)
  50.                                 PokeInt(tgaIMGBank,intwrite,pix%)
  51.                                 r%=(pix Shr 16) And $FF
  52.                                 g%=(pix Shr 8) And $FF
  53.                                 b%=pix And $FF
  54.                                 out_pix% = b% Or (g% Shl 8) Or (r% Shl 16)
  55.                                 intwrite=intwrite+4
  56.                                 WritePixelFast(x,y,out_pix%)
  57.                         Else
  58.                                
  59.                         EndIf
  60.                 Next
  61.         Next
  62.         UnlockBuffer
  63.         SetBuffer BackBuffer()
  64.        
  65.         Return tga.TGAImage
  66. End Function
  67.  
  68. Function DrawTGAStatic(hnd.TGAImage,sx%,sy%)
  69.         DrawImage(hndRGBImg,sx%,sy%)
  70. End Function
  71.  
  72. Function DrawTGAImage(hnd.TGAImage,sx%,sy%,a#=1,aopt#=True) ;Handle,XCord,YCord,Alpha,ARGB(FALSE=RGB)
  73.         intread=0
  74.         Local iA#=0.0
  75.         If aopt#=False Or hnddepth%<>32
  76.                 DrawImage(hndRGBImg,sx%,sy%)
  77.         Else
  78.                 LockBuffer()
  79.                 For y=hndheight%-1 To 0 Step -1
  80.                         For x=0 To hndwidth%-1
  81.                                 pix% = PeekInt(hndIMGBank,intread)
  82.                                 opix% = ReadPixelFast(sx%+x,sy%+y)
  83.                                
  84.                                 iA#=((pix Shr 24) And $FF)/255.0
  85.                                 Select hndlend%
  86.                                         Case 1
  87.                                                 iR%=((pix Shr 16) And $FF)*(a#*iA#)
  88.                                                 iG%=((pix Shr 8) And $FF)*(a#*iA#)
  89.                                                 iB=(pix And $FF)*(a#*iA#)
  90.                                                 gR%=((opix Shr 16) And $FF)+iR%
  91.                                                 gG%=((opix Shr 8) And $FF)+iG%
  92.                                                 gB%=(opix And $FF)+iB%
  93.                                         Case 0
  94.                                                 iR%=((pix Shr 16) And $FF)
  95.                                                 iG%=((pix Shr 8) And $FF)
  96.                                                 iB=(pix And $FF)
  97.                                                 gR%=((opix Shr 16) And $FF)
  98.                                                 gG%=((opix Shr 8) And $FF)
  99.                                                 gB%=(opix And $FF)
  100.                                                 gR%=gR%+(iR%-gR%)*iA#:gG%=gG%+(iG%-gG%)*iA#:gB%=gB%+(iB%-gB%)*iA#
  101.                                         Case -1
  102.                                                 iR%=((pix Shr 16) And $FF)*(a#*iA#)
  103.                                                 iG%=((pix Shr 8) And $FF)*(a#*iA#)
  104.                                                 iB=(pix And $FF)*(a#*iA#)
  105.                                                 gR%=((opix Shr 16) And $FF)-iR%
  106.                                                 gG%=((opix Shr 8) And $FF)-iG%
  107.                                                 gB%=(opix And $FF)-iB%
  108.                                 End Select
  109.                                
  110.                                 gR%=gR% And 255:gG%=gG% And 255:gB%=gB% And 255
  111.                                 rpix% = gB% Or (gG% Shl 8) Or (gR% Shl 16)
  112.                                 WritePixelFast(sx%+x,sy%+y,rpix%)
  113.                                 intread=intread+4
  114.                         Next
  115.                 Next
  116.                 UnlockBuffer()
  117.         EndIf
  118. End Function
  119.  
  120. Function FreeTGAImage(hnd.TGAImage)
  121.         FreeImage(hndRGBImg)
  122.         FreeBank(hndIMGBank)
  123.         Delete hnd
  124. End Function


Comments :


Christer(Posted 1+ years ago)

 It dont work for me... No errors no image nothing...


K@li(Posted 1+ years ago)

 any zip file ?


Nate the Great(Posted 1+ years ago)

 I made a function that does alpha here it is<a href="codearcsed4b.html?code=2299#comments" target="_blank">http://www.blitzbasic.com/codearcs/codearcs.php?code=2299#comments[/url]


ShadowTurtle(Posted 1+ years ago)

 1. debug test: invert alpha value2. debug test: use argb instead of rgbatry and see...


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal