Zitat:
D.h. ich muss alle Graphiken auf 24Bit reduzieren, und das würde also bedeuten, dass ich alle TransparenzInformationen verliere?
Davon kannst du ausgehen keine 32Bit beim *.bmp dann ist die Transparenz futsch.
Das Problem ist du hast zwar viel geschrieben aber dein Anliegen kann ich jetzt nicht direkt ersehen.
Was möchtest du also?
Unabhängig vom Format!
Lade ein Bild und erstelle dann ein neues direkt aus dem Speicher.
Transparent oder was auch immer.
Ich hab da mal was in C# gemacht vielleicht hilft es dir ja.
Code:
///<summary>
///Graphics related funcs
///</summary>
[SuppressUnmanagedCodeSecurity]
public sealed class PicFromMem
{
private static bool GetImageFromBytes(byte[] data, out Image image)
{
try
{
using (var ms = new MemoryStream(data))
{
image = Image.FromStream(ms);
}
}
catch (ArgumentException)
{
image = null;
return false;
}
return true;
}
private static Image RemoveMetadata(byte[] data)
{
Image image;
if (GetImageFromBytes(data, out image))
{
Bitmap bitmap = new Bitmap(image);
using (var graphics = Graphics.FromImage(bitmap))
{
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.DrawImage(image, 0, 0);
}
return image;
}
return null;
}
///<summary>
/// Get Image from Memory Pointer
///</summary>
///<returns>
///Image from Byte Array without MetaData
///</returns>
public static Image GetImageFromMemPtr(IntPtr DataPtr, long Size)
{
byte[] bArray = new byte[Size];
Marshal.Copy(DataPtr, bArray, 0, (int)Size);
// Remove MetaData from File
return RemoveMetadata(bArray);
}
}
gruss