Hi, its been a long time since I’ve been here. I’ve recently got the SCM2026D Dev board and wanted to try out the newer hardware with TinyCLR 2.0 (Spider was my last attempt )
I’ve got an SD card inserted an image stored in the root folder. A 24 bit Bitmap and a gif version. The bitmap loads and displays as expected using the following code:
var fileStream = new FileStream($@"{drive.Name}potion1ico.gif", FileMode.Open);
var icon = new Bitmap(fileStream);
If I try to load the .gif (Or a the .bmp) the using the new Bitmap(bytes, BitmapImageType.xxx) style:
string iconFileName = $@"{drive.Name}potion1ico.gif";
try
{
using (FileStream fsSource = new FileStream(iconFileName,
FileMode.Open, FileAccess.Read))
{
// Read the source file into a byte array.
byte[] bytes = new byte[fsSource.Length];
int numBytesToRead = (int)fsSource.Length;
int numBytesRead = 0;
while (numBytesToRead > 0)
{
// Read may return anything from 0 to numBytesToRead.
int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);
// Break when the end of the file is reached.
if (n == 0)
break;
numBytesRead += n;
numBytesToRead -= n;
}
icon = new Bitmap(bytes, BitmapImageType.Gif);
}
}
catch (Exception ioEx)
{
Debug.WriteLine(ioEx.Message);
icon = new Bitmap(50, 50);
}
Does your file have to be a gif or do you have the capability of converting it? I couldn’t even get a JPG to work so every image in my project is a native bitmap.
Hi Gus,
I’ve been eyeing the SCM20260D for a while so saved up a grabbed one :-). I still love using .net to code, even c# now ;-).
As to the resource, yes, I’ve added as a Gif Image resource it will display with no issues and correct transparency using:
var icon = BinaryResources.GetBitmap(BinaryResources.BitmapResources.potion1ico);
The issue is, I would like the software to download the required images (Plus other resources) from a cloud server to its local sd card and then display them on the screen in the app. I’m starting small so just trying to load an image from the sd card first
@sgtyar95 If I convert to a bitmap, I loose the transparency.
I’ve check the file on disk and it’s 1,581 bytes in size.
I set a break point just as it tries to create the bitmap and it shows that bytes = {byte[1581]}. So it looks like the size is the same.
Just to verify, I wrote the file back to the disk as a new .gif:
var file = new FileStream($@"{drive.Name}Test.gif", FileMode.OpenOrCreate);
file.Write(bytes, 0, bytes.Length);
file.Flush();
And this was the correct size and image when I checked on my laptop.
In case anyone else hits this problem, here is a version of the code that seems to work as expected
var sd = StorageController.FromName(SC20260.StorageController.SdCard);
var drive = FileSystem.Mount(sd.Hdc);
var stream = new FileStream(drive.Name + "Test.gif", FileMode.Open);
var data = new byte[stream.Length];
stream.Read(data, 0, data.Length);
var gifBitmap = new Bitmap(data, BitmapImageType.Gif);