Hi,
leider habe ich ein Problem mit den Demos. Ich nutze Demo_ID3v2_Level2.exe um ein Bild anzuhängen. In der "orginal" Demo-Exe klappt es auch.
Bei dem Demo-Sourcecode der dabei ist, klappt es nicht. Es klappt nur wenn vorher schon ein Bild enthalten war. Möchte man ein mp3 um ein Bild erweitern, dann klappt es nur mit der "orginal" Demo_ID3v2_Level2.exe.
Wäre toll wenn mir einer helfen würde.
Danke im voraus
EDIT: Ich habe ein bissl getraced. GetPictureFrameIndex da kommt er mit -1 zurück weil kein Bild da ist. Er legt es dann aber nicht an. Sind die DemoSource andere als die exe-files??
Edit2:
Der fehler ist hier.
Delphi-Quellcode:
// ------------------------------------------
// set pictures
// ------------------------------------------
procedure TID3v2Tag.SetPicture(MimeTyp: AnsiString; PicType: Byte; Description: UnicodeString; stream: TStream);
var IDX: Integer;
NewFrame: TID3v2Frame;
idStr: AnsiString;
oldMime: AnsiString;
oldDescription: UnicodeString;
oldType: Byte;
oldStream: TMemoryStream;
begin
idStr := GetFrameIDString(IDv2_PICTURE);
IDX := GetPictureFrameIndex({PicType,} Description);
if IDX <> -1 then
begin
if Stream = NIL then
Frames.Delete(IDX)
else
begin
if (Description = '*') or (MimeTyp = '*') or (Stream.size = 0) then
begin
oldStream := TMemoryStream.Create;
(Frames[IDX] as TID3v2Frame).GetPicture(oldMime, oldType, oldDescription, oldStream);
if (Description = '*') then
Description := oldDescription;
if (MimeTyp = '*') then
MimeTyp := oldMime;
if Stream.Size = 0 then
oldStream.SaveToStream(Stream);
oldStream.Free;
end;
(Frames[IDX] as TID3v2Frame).SetPicture(MimeTyp, PicType, Description, Stream)
end;
end else
begin
if (Stream <> NIL) and (Stream.Size > 0)then
begin
NewFrame := TID3v2Frame.Create(idStr, TID3v2FrameVersions(FVersion.Major));
NewFrame.AlwaysWriteUnicode := fAlwaysWriteUnicode;
newFrame.CharCode := fCharCode;
NewFrame.AutoCorrectCodepage := fAutoCorrectCodepage;
Frames.Add(newFrame);
if (Description = '*') then
Description := '';
if (MimeTyp = '*') then
MimeTyp := 'image/jpeg';
newFrame.SetPicture(MimeTyp, PicType, Description, stream)
end;
end;
end;
Er merkt das kein Bild da ist, legt es an (NewFrame) und "schmeisst" es weg. Trotzdem frage ich mich warum es bei den demo-exe-files geht. Dürfte ja nicht...