Entwickler-Ecke
Multimedia / Grafik - PNG zu Ico konvertieren
Regan - Sa 28.03.09 16:18
Titel: PNG zu Ico konvertieren
Hallo,
ich würde gern ein PNG-Bild in Ico konvertieren. Allerdings habe ich keinen blassen Schimmer. Kann mir da vielleicht jemand helfen?
MfG
Regan
JayEff - Sa 28.03.09 16:34
hab mal bei google "png2ico" eingebeben und kam auf das:
http://winterdrache.de/freeware/png2ico/ eine Windows-Consolenanwendung und den Source zum selbst kompilieren - vielleicht kannst du damit was anfangen, auch wenn das sicherlich C/C++ sein wird :zustimm:
Regan - Sa 28.03.09 17:09
Dort kann man das machen. Mich interessiert aber die Technologie dahinter :wink: .
JayEff - Sa 28.03.09 17:15
Unter meinem Link findet sich wie gesagt ein c++ source-code aber auch eine dokumentation dazu, beides im .tar.gz Packet, welches man per WinRAR öffnen kann. Ich hoffe, damit kommst du weiter... Normalerweise würd ich mir das aus Eigeninteresse selbst durchlesen und versuchen hinter den C++ QT zu steigen aber ich muss unbedingt diese blöden !$§%& Mathe-Prüfungen bestehen :motz:
Dude566 - Sa 28.03.09 17:31
Regan hat folgendes geschrieben : |
Dort kann man das machen. Mich interessiert aber die Technologie dahinter :wink: . |
Achso, das musst du schon explizit sagen. :P
elundril - Sa 28.03.09 17:33
sodala:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117:
| function PNGtoIcon(const APNG : TPNGObject; ACursor : Boolean = false; AHotSpotX : Integer = 0; AHotSpotY : Integer = 0) : HICON; var Width, Height : Integer; BitmapHeader : PBitmapV5Header; hNewBitmap, hMonoBitmap : HBITMAP; Bits : Pointer; x, y : Integer; DC : HDC; IconInfo : _ICONINFO; Pixel : ^Integer; ScanLine : PRGBTriple; AlphaScanline : pByteArray; begin
Width := APNG.Width; Height := APNG.Height;
New(BitmapHeader);
BitmapHeader.bV5Size := sizeof(BITMAPV5HEADER);
BitmapHeader.bV5Width := Width; BitmapHeader.bV5Height := -Height;
BitmapHeader.bV5Planes := 1; BitmapHeader.bV5BitCount := 32;
BitmapHeader.bV5Compression := BI_BITFIELDS; BitmapHeader.bV5RedMask := $00FF0000; BitmapHeader.bV5GreenMask := $0000FF00; BitmapHeader.bV5BlueMask := $000000FF; BitmapHeader.bV5AlphaMask := $FF000000;
DC := GetDC(0); hNewBitmap := CreateDIBSection( DC, PBitmapInfo(BitmapHeader)^, DIB_RGB_COLORS, Bits, 0, 0); Dispose(BitmapHeader); ReleaseDC(0,dc); hMonoBitmap:=CreateBitmap(Width,Height,1,1,nil);
Pixel := Bits; for y := 0 to Height-1 do begin ScanLine := APNG.Scanline[y]; AlphaScanline := APNG.AlphaScanline[y]; for x := 0 to Width - 1 do begin Pixel^ := AlphaScanLine[x]; Pixel^ := Pixel^ shl 8; Inc(Pixel^, Scanline^.rgbtRed); Pixel^ := Pixel^ shl 8; Inc(Pixel^, Scanline^.rgbtGreen); Pixel^ := Pixel^ shl 8; Inc(Pixel^, Scanline^.rgbtBlue); Inc(Pixel);
Inc(ScanLine); end; end;
IconInfo.fIcon := not ACursor; if ACursor then begin IconInfo.xHotspot := AHotSpotX; IconInfo.yHotspot := AHotSpotY; end; IconInfo.hbmMask := hMonoBitmap; IconInfo.hbmColor := hNewBitmap;
Result := CreateIconIndirect(IconInfo);
DeleteObject(hNewBitmap); DeleteObject(hMonoBitmap);
end; |
Benötigte Units: PNGImage
Was der Code tut? er convertiert ein PNG in ein 32 bit Icon mit Alphakanal. ;-)
Quelle: unbekannt
Regan - Sa 28.03.09 22:07
Ich schau mir das mal morgen an, bin jetzt doch etwas müde.
Vielen Dank aber trotzdem :zustimm: .
Regan - Sa 11.04.09 21:00
So, ich habe mir das angeschaut.
1. Ich habe keine PNGImage.pas gefunden, die bei mir einigermaßen läuft, ohne, dass ich den halben Quelltext auskomentieren muss, aber egal.
elundril hat folgendes geschrieben : |
Delphi-Quelltext 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64:
| { ... } BitmapHeader.bV5AlphaMask := $FF000000;
DC := GetDC(0); hNewBitmap := CreateDIBSection( DC, PBitmapInfo(BitmapHeader)^, DIB_RGB_COLORS, Bits, 0, 0); Dispose(BitmapHeader); ReleaseDC(0,dc); hMonoBitmap:=CreateBitmap(Width,Height,1,1,nil); | |
Folgender Fehler:
Zitat: |
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt ist eine Exception der Klasse EZeroDivide mit der Meldung 'Gleitkommadivision durch Null' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
|
Edit:
Fehler besteht nicht mehr. Habe mir die
aktuelle Version [
http://www.delphi-forum.de/topic_Konvertierunsunit+von+BMP+JPG+und+PNG_71359.htm] nochmal gezogen.
Edit2:
Fehler besteht wieder.
Regan - So 12.04.09 12:53
Ich habe das jetzt mal beobachtet. Wenn ich einen OpenPictureDialog einmal geöffnet habe und mir dort einmal ein PNG-Bild in der Vorschau anzeigen lassen habe, dann funktioniert es ohne Fehler. Hab ich keine Vorschau gewählt, dann schmiert mir das Programm an eben dieser Stelle ab.
Ich wäre sehr froh, wenn mir da jemand weiterhelfen würde :) .
Edit:
Fehler behoben [
http://www.delphipraxis.net/topic125964.html]. Funktion einfach von dort nehmen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!