读书人

怎么显示raw图像(纯图像数据8位的黑

发布时间: 2012-02-16 21:30:36 作者: rapoo

如何显示raw图像(纯图像数据,8位的黑白图像)
网上也有类似的帖子,但我就是没法显示出来,新手上路,水平有限。
纯数据的8位图像数据,因为图像很大,所以只要显示出来,而且要局部显示(只要能显示出来我想局部显示我是可以自己解决的),不要转化成bmp等格式。我想是应该读一段数据到image里,指定调色板和宽度高度,但就是没法放进去,请有经验的大虾们给一段代码,分不够可以再加,谢谢!
还有——scanline可以成行读出来,有什么方法可以成行写进去的吗?

[解决办法]
既然是8位图像,也就是256色的灰度图了,还有要知道该图的宽度和高度w和h,然后把数据读入内存,这时是一个一维数组,根据数据结构中二维数组的计算公式,可以得到该图每个点的颜色值,你只需要获得要显示矩形部分的颜色值就可以了。
[解决办法]
procedure RawToBitmap(Stream: TStream;
const Width, Height, ColorDepth: Integer; Bmp: TBitmap);
var
RemLen, DataLen, i: Integer;
begin
case ColorDepth of
1:
begin
Bmp.PixelFormat := pf1Bit;
DataLen := (Width + 7) shr 3;
end;
4:
begin
Bmp.PixelFormat := pf4Bit;
DataLen := (Width + 1) shr 1;
end;
8:
begin
Bmp.PixelFormat := pf8Bit;
DataLen := Width;
end;
15:
begin
Bmp.PixelFormat := pf15Bit;
DataLen := Width shl 1;
end;
16:
begin
Bmp.PixelFormat := pf16Bit;
DataLen := Width shl 1;
end;
24:
begin
Bmp.PixelFormat := pf24Bit;
DataLen := Width shl 1 + Width;
end;
32:
begin
Bmp.PixelFormat := pf32Bit;
DataLen := Width shl 2;
end;
end;
Bmp.Width := Width;
Bmp.Height := Height;
RemLen := (DataLen + 3) shr 2 shl 2 - DataLen;

Stream.Position := 0;
for i := 0 to Height - 1 do begin
Stream.Read(Bmp.ScanLine[Height - 1 - i]^, DataLen);
if RemLen <> 0 then
Stream.Seek(RemLen, soFromCurrent);
end;
end;

读书人网 >.NET

热点推荐