Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011
-
9 oct. 2008 à 18:19
Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011
-
15 oct. 2008 à 18:29
Bonjour
Delphi 7 (Win32). Je n'y comprends rien. Je n'arrive pas à charger une image sur deux dans un TBitmap, malgré que la structure de ces fichiers soit parfaitement valide. Vérifié, car ces images s'ouvrent parfaitement avec tous les logiciels existants !
Aucun 'warning' à la compilation, mais j'obtiens toujours l'erreur 'EReadError' avec le commentaire 'Erreur de lecture du flux', ce qui ne m'avance pas beaucoup...
Voici le petit bout de code qui coince :
procedure TFVisuSkin.FormShow(Sender: TObject);
var
Bit : TBitmap;
str : String;
begin
str:='D:\Detente\1946\PaintSchemes\Skins\A-20C\A20A_USAAF_1941.bmp';
Bit:=TBitmap.Create;
Bit.LoadFromFile(str);
end;
Nicolas___
Messages postés992Date d'inscriptionjeudi 2 novembre 2000StatutMembreDernière intervention24 avril 20131 9 oct. 2008 à 18:40
tu ne devrais pas placer ca dans le onShow
% aide : OnShow : Se produit quand la fiche est affichée (c'est-à-dire quand la propriété Visible de la fiche prend la valeur true).
si tu veux charger une image, place ton code dans un bouton , en oubliant pas de faire bit.free à la fin pour liberer ton TBitmap ...
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Bit : TBitmap;
begin
Bit:=TBitmap.Create;
Bit.LoadFromFile('D:\Detente\1946\PaintSchemes\Skins\A-20C\A20A_USAAF_1941.bmp');
Bit.Free;
end;
end.
He ben, ça coince encore lorsque je clique sur le bouton (EReadError...). On pourrait croire que le fichier est pourri... mais le plus ralant, c'est que ce BMP (et ce n'est pas le seul) s'ouvre sans problème avec PaintShop, PhotoShop, etc...
C'est vraiment un casse-tête incompréhensible !
:)
Champy
Vous n’avez pas trouvé la réponse que vous recherchez ?
fbalien
Messages postés251Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention11 novembre 2016 9 oct. 2008 à 21:27
Bonjour
vu le nom de votre fichier c'est une texture de Flight sim non ?
dans ce cas ce n'est pas un BMP lisible via Delphi directement
voir "Les images particulières" sur mon site http://francois.basso.9online.fr/Informatique/informatique.html en allant sur la page les images BMP
j'avais commencé un soft pour pouvoir lire et modifier ces images
Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011 9 oct. 2008 à 23:47
Bonsoir
Bien vu. Ce sont en effet des images servant à 'habiller' des avions virtuels. Heureusement que je n'ai pas caché les répertoires que j'utilise réellement...On appelle ces fichiers des 'skins' dans le jargon local.
Mais qu'ont-ils donc de spécial qui les rend illisibles uniquement avec Delphi ?
Parce que, bizzarement, il suffit qu'on en charge un dans PaintShop, puis qu'on le sauvegarde sous un autre nom pour que Delphi l'accepte !
Merci dans tous les cas. Je vais voir ton site.
Champy
Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011 10 oct. 2008 à 00:11
Houlala, c'est bien compliqué pour mon petit neurone... mais très intéressant.
En bref, comment puis-je m'en sortir ? parce que le problème, c'est que j'ai environ 3000 images comme ça, que j'envisage de ranger de manière 'automatique' (par similitude de certaines zones). Alors, je ne me vois pas toutes les charger dans Paintshop pour les sauvegarder sous un autre nom... sinon, je ne vais faire que ça, jour et nuit, pendant 1 mois ! ou plus...
:)
fbalien
Messages postés251Date d'inscriptiondimanche 7 décembre 2003StatutMembreDernière intervention11 novembre 2016 10 oct. 2008 à 11:15
Bonjour
Attention le fait de l'enregistrer avec un autre soft fait perdre une partie des information stockés dans l'image
et donc les rendent certainement non utilisable comme texture
Faut que je retrouve les sources qui me permettait d'ouvrir ces images
Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011 10 oct. 2008 à 12:36
Bizarement, les fichiers enregistrés avec un autre soft, et qui en changent certainement un peu la structure, fonctionnent parfaitement dans le jeu, même si on en change la résolution ou le nombre de couleurs !
Je pense que l'auteur a du prévoir cette éventualité dans son jeu. Donc, son soft doit bien savoir différentier les différents 'formats' de bmp...
Champy33
Messages postés14Date d'inscriptionjeudi 2 octobre 2008StatutMembreDernière intervention19 mai 2011 15 oct. 2008 à 18:29
Bonjour
A force de 'bricoler' pendant de longues heures d'énervement, j'ai enfin trouvé comment remédier à mon problème de chargement de certains fichiers bmp.
Il faut copier le fichier 'graphic.pas' d'origine dans son répertoire de sources, afin qu'il soit utilisé à la place de l'originel. Ensuite, il faut modifier le code d'une de ses procédures comme suit :
procedure TBitmap.ReadDIB(Stream: TStream; ImageSize: LongWord; bmf: PBitmapFileHeader); ...
...
try
{$IFDEF LINUX}
// I need to pre-touch the memory in 4096 byte increments to ensure
// the read will succeed. WINE marks this memory as not present to
// catch when we make changes to it. If we read directly into it
// Linux will (correctly) terminate the read with a failure since an
// exception occured during the read. We need to make sure these
// exceptions are triggered in user space instead of kernel.
for I := 1 to (ImageSize + 4095) div 4096 do
PByteArray(BitsMem)^[(I - 1) * 4096] := 0;
{$ENDIF}
// !!! Il faut retirer 2 octets à l'ImageSize pour que ça marche !!! Stream.ReadBuffer(BitsMem^, ImageSize-2);
except
DeleteObject(BMHandle);
raise;
end;
...
Voilà. Après cette minuscule modification, les bmp 'normaux' se chargent toujours sans problème (tout du moins ceux que j'ai en magasin...), ainsi que ceux issus du jeu de simulation de vol IL2 FB.
En conclusion, je pense pouvoir avancer sans trop me tromper que le format de ces bmp ne respecte pas à la lettre un des standards 'normaux'. Néanmoins, je ne peux pas affirmer que les formats 'normaux' de bmp seront tous lus sans erreur suite à la modification que je propose.