送50分。如何读取已加密的图象文件?(不能产生临时文件) (50分)

  • 主题发起人 billjohn1999
  • 开始时间
B

billjohn1999

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个图象文件,是已经过加密的
(例如:图象文件是原图像文件每个字节xor 33得到的),
我现在需要得到该图象,在不用临时文件的情况下,
该如何得到图象的width、height,及每一像素的RGB值?
希望能给出代码示例,非常感谢!
 
如果只是象素点加密而位图文件没有加密的化,那还是比较简单的,同样进行xor操作阿
即a xor b xor b=a
用scanline快速实现
 
先把文件按字节读出来,处理完了后写入一个stream,然后TBitmap.LoadFromStream试试看,
我没有试过,不保证可行
 
我好像有代码!
 
我就是这样做的,很安全!
我用的是envision image library控件(有源代码)改起来很方便的!
在读文件的地方先处理stream
 
用stream绝对可以,你甚至可以定制自己的stream
 
to donkey,我知道用stream可以啊,可是我不会用。
怎么定制stream呢?能否给出例子?谢谢。
 
Stream.LoadFromFile(FileName);
{$IFDEF CRYPT}
FillChar(buf1, SizeOf(buf1), #$20);
FillChar(buf2, SizeOf(buf2), #$20);
Stream.Seek(1021, soFromBeginning);
Stream.ReadBuffer(mag, SizeOf(mag));
Stream.Seek(0, soFromBeginning);
if mag[3] + mag[2] + mag[1] = 'II*' then // 没有加密的文件也能查看!
begin
Stream.ReadBuffer(buf1, SizeOf(buf1));
for Loop := 1 to MAX_HASH do
buf2[MAX_HASH + 1 - Loop] := buf1[Loop];
Stream.Seek(0, soFromBeginning);
Stream.WriteBuffer(buf2, SizeOf(buf2));
Stream.Seek(0, soFromBeginning);
end;
{$ENDIF}
 
to tulipfan:谢谢。可我看不懂你的例子啊。该怎么用你的例子?

如何用stream读取bmp文件的文件头呢?有没有代码示例?
 
把文件读取,并解密到流中,在将流中的内容赋给其它对象
 
如何读取、加密、保存bmp图像文件头呢?
例如,我只对文件头进行xor一个数的加密。
希望哪位大侠能给个例子。
 
很简单的。 bmp文件格式就是
TBitmapFileHeader+TDIBSection+Bits
你只要将bmp保存到Stream中然后随便你怎么加解密这个stream都可以。

顺便说一句。 如果只是简单的异或加密, 要读图片的width和Height根本不需要全部解密图片。
只要读入bmp文件起始位置开始偏移Sizeof(TBitmapFileHeader)+Sizeof(Integer)处开始的8字节解密即可。
那里就保存着图片的宽和高。
 
谢谢Another_eYes,我去试试,如果成功就散分。
 
多人接受答案了。
 
顶部