@all
ich bin hier wieder mal am verzweifeln.
Ich will einfach nur ^^ ein Image was PNG32 ist konvertieren zu einem PNG8 Alpha.
public static Bitmap ImageConvert(Bitmap pic)
{
Graphics g = Graphics.FromImage(pic);
Bitmap newPic = new Bitmap(pic.Width, pic.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
g.DrawImage(newPic, pic.Width, pic.Height);
return newPic;
}
was rauskommt ist einfach nur schwarz X(
Ich habe mal das Source Pic mit dazugegeben wenn jemand eine lösung weiss wäre das ein super knaller
grüße,
elron
Weil du das neue Bild in das neue Bild zeichnest.
// Edit:
public static Bitmap ImageConvert(Bitmap pic)
{
using (g = Graphics.FromImage(pic)) // Using verwenden, oder g.Dispose aufrufen, um am Ende Resourcen wieder freizugeben!
{
Bitmap newPic = new Bitmap(pic.Width, pic.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
g.DrawImage(pic, pic.Width, pic.Height);
return newPic;
}
}
Weeks of programming can save you hours of planning
Hallo,
genau genommen: Das neue Bild in das alte... und das neue, auf dem noch garnix gewzeichnet wurde, wird zurückgegeben.
Gruß, MarsStein
Edit:
@MrSparkle: müsste doch dan eigentlich so lauten:
public static Bitmap ImageConvert(Bitmap pic)
{
Bitmap newPic = new Bitmap(pic.Width, pic.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
using (g = Graphics.FromImage(newPic)) // Using verwenden, oder g.Dispose aufrufen, um am Ende Resourcen wieder freizugeben!
{
g.DrawImage(pic, pic.Width, pic.Height);
return newPic;
}
}
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Genau, so müßte was dabei herauskommen 😃
Weeks of programming can save you hours of planning
erstmal danke aber das pic ist immer noch black..
Bitmap current = new Bitmap(@"test.png");
Bitmap bitmap = ImageConvert(current);
bitmap.Save(@"test8bit.png");
public static Bitmap ImageConvert(Bitmap pic)
{
Bitmap newPic = null;
using (Graphics g = Graphics.FromImage(pic))
{
newPic = new Bitmap(pic.Width, pic.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
g.DrawImage(newPic, pic.Width, pic.Height);
}
return newPic;
}
evtl. könntest du ja mal das pic nehmen was ich angehangen habe...
dann siehst du das selber mal, es ist einfach nur schwarz ich versteh das nicht
danke und grüße
elron
Hallo,
Du erstellst immer noch die Graphics aus dem falschen Bild.
Sieh Dir noch mal den Code in meinem vorherigen Post an.
Gruß, MarsSTein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
ne zu früh gefreut
Ich bekomme eine Exception
bei using (Graphics g = Graphics.FromImage(newPic))
public static Bitmap ImageConvert(Bitmap pic)
{
Bitmap newPic = new Bitmap(pic.Width, pic.Height, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
using (Graphics g = Graphics.FromImage(newPic))
{
g.DrawImage(pic, pic.Width, pic.Height);
}
return newPic;
}
Also das Snipped funktioniert definitiv nicht X(
elron
Edit
Ich seh grad das geht nicht ...
Hinweise
Wenn das Bild in einem indizierten Pixelformat vorliegt, löst diese Methode eine Ausnahme mit der folgenden Meldung aus: "Ein Grafikobjekt kann nicht von einem Bild mit indiziertem Pixelformat erstellt werden.". In der folgenden Liste finden Sie alle indizierten Pixelformate.Format1bppIndexed
Format4bppIndexed
Format8bppIndexed
mhh kann man das dann überhaupt konvertieren auf diesem wege?
elron
Wie sieht denn die Exception aus? 😃
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Wie sieht denn die Exception aus? 😃
in meinem Post drüber habe ich das noch angefügt.
Siehe: In der folgenden Liste finden Sie al....
elron
Hallo,
stimmt, es kann gar nicht klappen:
Graphics.FromImage-Methode
unter "Ausnahmen" steht daß FromImage keine indizierten Formate unterstützt 🙁
Dann wirst Du das von Hand machen müssen. Schau mal hier:
GetPixel und SetPixel um Längen geschlagen. 800 mal schneller
Das könnte Dir weiterhelfen.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Wenn du den Framework 3.5 verwendest, kannst du das evtl. mit der PNGBitmapEncoder-Klasse lösen.
Weeks of programming can save you hours of planning
RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap(200, 200, 92, 92, PixelFormats.Pbgra32);
DrawingVisual drawingVisual = new DrawingVisual();
renderTargetBitmap.Render(drawingVisual);
FormatConvertedBitmap fcb =
new FormatConvertedBitmap(renderTargetBitmap, PixelFormats.Indexed8, BitmapPalettes.Halftone8Transparent, 0.5);
PngBitmapEncoder pngBitmapEncoder = new PngBitmapEncoder();
pngBitmapEncoder.Interlace = PngInterlaceOption.Off;
pngBitmapEncoder.Frames.Add(BitmapFrame.Create(fcb));
using (Stream fileStream = File.Open(@"test.png", FileMode.Create))
{
pngBitmapEncoder.Save(fileStream);
}
Hier bekomme ich ein komplett transparentes bild raus ..
also ich weiss auch nicht mehr weiter ... ich werden mal weiter testen ..danke für den post