@@ -347,7 +347,7 @@ private void setDataDirectoryToolStripMenuItem_Click(object sender, EventArgs e)
347
347
{
348
348
pgObject . SelectedObject = model . G1 ;
349
349
var images = CreateImages ( model . G1 . G1Elements , model . Palette ) ;
350
- CurrentUIImages = CreateImageControls ( images ) . ToList ( ) ;
350
+ CurrentUIImages = CreateImageControls ( images , model . G1 . G1Elements ) . ToList ( ) ;
351
351
}
352
352
}
353
353
}
@@ -432,7 +432,7 @@ void LoadG1(string filename)
432
432
{
433
433
pgObject . SelectedObject = model . G1 ;
434
434
var images = CreateImages ( model . G1 . G1Elements , model . Palette ) ;
435
- CurrentUIImages = CreateImageControls ( images ) . ToList ( ) ;
435
+ CurrentUIImages = CreateImageControls ( images , model . G1 . G1Elements ) . ToList ( ) ;
436
436
LoadDataDump ( filename , true ) ;
437
437
}
438
438
@@ -492,7 +492,7 @@ void CreateSounds(SoundObject soundObject)
492
492
flpImageTable . ResumeLayout ( true ) ;
493
493
}
494
494
495
- IEnumerable < Control > CreateImageControls ( IEnumerable < Bitmap > images )
495
+ IEnumerable < Control > CreateImageControls ( IEnumerable < Bitmap > images , List < G1Element32 > g1Elements ) // g1Elements is simply used for metadata at this stage
496
496
{
497
497
// on these controls we could add a right_click handler to replace image with user-created one
498
498
var count = 0 ;
@@ -515,8 +515,9 @@ IEnumerable<Control> CreateImageControls(IEnumerable<Bitmap> images)
515
515
} ;
516
516
517
517
var tb = new TextBox ( ) ;
518
- tb . MinimumSize = new Size ( 32 , 16 ) ;
519
- tb . Text = count ++ . ToString ( ) ;
518
+ tb . MinimumSize = new Size ( 96 , 16 ) ;
519
+ tb . Text = $ "i={ count } w={ g1Elements [ count ] . Width } h={ g1Elements [ count ] . Height } ";
520
+ count ++ ;
520
521
tb . Dock = DockStyle . Top ;
521
522
522
523
panel . Controls . Add ( tb ) ;
@@ -537,43 +538,73 @@ IEnumerable<Bitmap> CreateImages(List<G1Element32> G1Elements, Color[] palette,
537
538
for ( var i = 0 ; i < G1Elements . Count ; ++ i )
538
539
{
539
540
var currElement = G1Elements [ i ] ;
540
- var imageData = currElement . ImageData ;
541
-
542
- if ( currElement . ImageData . Length == 0 || currElement . Flags . HasFlag ( G1ElementFlags . IsR8G8B8Palette ) )
541
+ if ( currElement . ImageData . Length == 0 )
543
542
{
544
- logger . Info ( $ "skipped loading g1 element { i } with flags { currElement . Flags } ") ;
543
+ logger . Info ( $ "skipped loading g1 element { i } with 0 length ") ;
545
544
continue ;
546
545
}
547
546
548
- var dstImg = new Bitmap ( currElement . Width , currElement . Height ) ;
549
- var rect = new Rectangle ( 0 , 0 , currElement . Width , currElement . Height ) ;
550
- var dstImgData = dstImg . LockBits ( rect , ImageLockMode . WriteOnly , PixelFormat . Format32bppArgb ) ;
551
- for ( var y = 0 ; y < currElement . Height ; ++ y )
547
+ if ( currElement . Flags . HasFlag ( G1ElementFlags . IsR8G8B8Palette ) )
552
548
{
553
- for ( var x = 0 ; x < currElement . Width ; ++ x )
554
- {
555
- var paletteIndex = imageData [ ( y * currElement . Width ) + x ] ;
549
+ var imageData = currElement . ImageData ;
550
+ var dstImg = new Bitmap ( currElement . Width , currElement . Height ) ;
551
+ var rect = new Rectangle ( 0 , 0 , currElement . Width , currElement . Height ) ;
552
+ var dstImgData = dstImg . LockBits ( rect , ImageLockMode . WriteOnly , PixelFormat . Format32bppArgb ) ;
556
553
557
- // the issue with greyscale here is it isn't normalised so all heightmaps are really dark and hard to see
558
- //var colour = obj.Object is HillShapesObject
559
- // ? Color.FromArgb(paletteIndex, paletteIndex, paletteIndex) // for hillshapes, its just a heightmap so lets put it in greyscale
560
- // : palette[paletteIndex];
554
+ var k = 0 ;
555
+ for ( var j = 0 ; j < currElement . Width ; ++ j ) // += 4 for a 32-bit ptr++
556
+ {
557
+ var b = imageData [ k ++ ] ;
558
+ var g = imageData [ k ++ ] ;
559
+ var r = imageData [ k ++ ] ;
560
+ ImageHelpers . SetPixel ( dstImgData , j , 1 , Color . FromArgb ( r , g , b ) ) ;
561
+ }
561
562
562
- if ( paletteIndex == 0 && useTransparency )
563
- {
564
- //ImageHelpers.SetPixel(dstImgData, x, y, colour);
565
- }
566
- else
567
- {
568
- var colour = palette [ paletteIndex ] ;
569
- ImageHelpers . SetPixel ( dstImgData , x , y , colour ) ;
570
- }
563
+ dstImg . UnlockBits ( dstImgData ) ;
564
+ yield return dstImg ;
565
+ }
566
+ else
567
+ {
568
+ var bmp = G1ElementToBitmap ( currElement , palette , useTransparency ) ;
569
+ if ( bmp != null )
570
+ {
571
+ yield return bmp ;
571
572
}
572
573
}
574
+ }
575
+ }
573
576
574
- dstImg . UnlockBits ( dstImgData ) ;
575
- yield return dstImg ;
577
+ Bitmap ? G1ElementToBitmap ( G1Element32 currElement , Color [ ] palette , bool useTransparency = false )
578
+ {
579
+ var imageData = currElement . ImageData ;
580
+ var dstImg = new Bitmap ( currElement . Width , currElement . Height ) ;
581
+ var rect = new Rectangle ( 0 , 0 , currElement . Width , currElement . Height ) ;
582
+ var dstImgData = dstImg . LockBits ( rect , ImageLockMode . WriteOnly , PixelFormat . Format32bppArgb ) ;
583
+ for ( var y = 0 ; y < currElement . Height ; ++ y )
584
+ {
585
+ for ( var x = 0 ; x < currElement . Width ; ++ x )
586
+ {
587
+ var paletteIndex = imageData [ ( y * currElement . Width ) + x ] ;
588
+
589
+ // the issue with greyscale here is it isn't normalised so all heightmaps are really dark and hard to see
590
+ //var colour = obj.Object is HillShapesObject
591
+ // ? Color.FromArgb(paletteIndex, paletteIndex, paletteIndex) // for hillshapes, its just a heightmap so lets put it in greyscale
592
+ // : palette[paletteIndex];
593
+
594
+ if ( paletteIndex == 0 && useTransparency )
595
+ {
596
+ //ImageHelpers.SetPixel(dstImgData, x, y, colour);
597
+ }
598
+ else
599
+ {
600
+ var colour = palette [ paletteIndex ] ;
601
+ ImageHelpers . SetPixel ( dstImgData , x , y , colour ) ;
602
+ }
603
+ }
576
604
}
605
+
606
+ dstImg . UnlockBits ( dstImgData ) ;
607
+ return dstImg ;
577
608
}
578
609
579
610
void SelectNewPalette ( )
@@ -613,7 +644,11 @@ private void RefreshObjectUI()
613
644
}
614
645
615
646
var images = CreateImages ( CurrentUIObject . G1Elements , model . Palette ) ;
616
- CurrentUIImages = CreateImageControls ( images ) . ToArray ( ) ;
647
+ CurrentUIImages = CreateImageControls ( images , model . G1 . G1Elements ) . ToArray ( ) ;
648
+ }
649
+ else
650
+ {
651
+ CurrentUIImages = new List < Control > ( ) ;
617
652
}
618
653
619
654
if ( CurrentUIObject ? . Object is SoundObject soundObject )
0 commit comments