IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Bmp-вьювер., Гляньте и исправьте
EXE
сообщение 6.12.2004 22:05
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Диман

Репутация: -  0  +


Смотрим: :low:

Unit bmp;

interface

Procedure BMPDisplay(const FileName: String);

implementation

Uses Graph;

Type
TBitMapHeader =
Record
bfType : Word; { Метка файла BM }
bfSize : LongInt; { Длина файла в байтах }
bfReserved : LongInt; { Резервные должны быть = 0 }
bfOffBits : LongInt; { Смещение области данных }
biSize : LongInt; { Длина BITMAP_INFO заголовка }
biWidth : LongInt; { Ширина изображения в пикселах }
biHeight : LongInt; { Высота изображения в пикселах }
biPlanes : Word; { Цветовые плоскости = 1 }
biBitCount : Word; { Количество битов на пиксел 1,4,8,24 }
biCompression : LongInt; { Тип сжатия данных }
biSizeImage : LongInt; { Размер изображения в байтах }
biXPelsPerMeter : LongInt; { Разрешение по горизонтали }
biYPelsPerMeter : LongInt; { Разрешение по вертикали }
biClrUsed : LongInt; { Количество используемых цветов }
biClrImportant : LongInt; { Количество основных цветов }
End;

TRGBQuad = { Описание цвета }
Record
rgbBlue, { Интенсивность голубого }
rgbGreen, { Интенсивность зеленого }
rgbRed, { Интенсивность красного }
rgbReserved : Byte; { Резервный }
End;

Type TByteArray = Array[0..50000] of byte;

Procedure Display1 (Var f : File; const BitMapHeader : TBitMapHeader);
Begin
WriteLn ('Monocrome mode not support.');
End;

Procedure Display4 (Var f : File; const BitMapHeader : TBitMapHeader);
Var i,j : Integer;
Var RGBQuad : TRGBQuad;
Var TwoPixel : Byte;
Var Black : Byte;
Var Line : ^TByteArray;
Var number : Word;
Var BeginX,BeginY,EndY : Integer;
CurrentX: Integer;
Begin
If GetMaxColor < 15 then
Begin
WriteLn ('This Graph Mode not paint 16 colors.');
Exit;
End;

Black := 16;
With BitMapHeader do
begin
For i:= 0 to 15 do { Чтение и изменение палитры }
Begin
BlockRead(f,RGBQuad,SizeOf(RGBQuad));
If (LongInt(RGBQuad)=0) then Black := i;
With RGBQuad do
SetRGBPalette(i, rgbRed shr 2, rgbGreen shr 2, rgbBlue shr 2);
SetPalette(i,i);
End;

Number := (biWidth div 2 + 3) and not 3; { Длина одной строки в байтах }
BeginX := (GetMaxX - biWidth) div 2;
BeginY := GetMaxY - (GetMaxY - biHeight) div 2;
EndY := BeginY+1-biHeight;
End;

GetMem (Line,number+1); { Выводим изображение }
For j:=BeginY downto EndY do
Begin
BlockRead(f,Line^[1],number);
CurrentX := BeginX;
For i:=1 to number do
Begin
TwoPixel := Line^[i];
If TwoPixel shr 4 <> Black then { Черный цвет считаем прозрачным }
PutPixel(CurrentX,j,TwoPixel shr 4);
Inc(CurrentX);
If TwoPixel and 15 <> Black then
PutPixel(CurrentX,j,TwoPixel and 15);
Inc(CurrentX);
End;
End;
FreeMem (Line,number+1);
End;

Procedure Display8 (Var f : File; const BitMapHeader : TBitMapHeader);
Begin
WriteLn ('Mode of 256 colors no support.');
End;

Procedure Display24 (Var f : File; const BitMapHeader : TBitMapHeader);
Begin
WriteLn ('Mode of 24 bit color not support.');
End;

Procedure BMPDisplay(const FileName: String);
Var f: File;
BitMapHeader : TBitMapHeader;
Begin
Assign(f,FileName);
{$I-}
FileMode:=0; { Открываем файл для чтения }
Reset(f,1);
{$I+}

If IOResult<>0 Then
Begin
WriteLn ('File not found.');
Exit;
End;

BlockRead(f,BitMapHeader,SizeOf(BitMapHeader));
With BitMapHeader do
Begin
If (bfType<>19778) or (bfReserved<>0) or (biPlanes<>1) then
Begin
WriteLn ('No format of BMP-file.');
Close(f);
Exit;
End;
If biCompression<>0 Then
Begin
WriteLn ('File has been packed.');
Close(f);
Exit;
End;
ClearDevice;
Case biBitCount of
1 : Display1 (f, BitMapHeader);
4 : Display4 (f, BitMapHeader);
8 : Display8 (f, BitMapHeader);
24 : Display24 (f, BitMapHeader);
else
Begin
WriteLn ('No format of BMP-file.');
Close(f);
Exit;
End;
End;
End;
Close(f);
End;
End.

Этот модуль читает только 16-тиразрядные а хотелось бы побольше! Помогите если можете!!!


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
Altair
сообщение 6.12.2004 23:18
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Этот модуль читает только 16-тиразрядные а хотелось бы побольше! Помогите если можете!!!

Я же выложил модуль для работы с 256 BMP - смотри в тестовом форуме.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
EXE
сообщение 7.12.2004 15:52
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 47
Пол: Мужской
Реальное имя: Диман

Репутация: -  0  +


Извини, не заметил. :molitva:


--------------------
Время есть сущность всех вещей.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"