Сейчас на форуме: vasilevradislav (+2 невидимых)

 eXeL@B —› Оффтоп —› расшифровка картинки
Посл.ответ Сообщение


Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 25 марта 2010 23:05
· Личное сообщение · #1

Есть софтина, которая сохраняет картинку в свой формат .img, а также в .bmp.
Хочется написать тулзу, которая могла бы читать сохраненный той программой .img.
Я вот посмотрел через hex оба файла (.img и .bmp.), они похожи. Но я не могу придумать,
как программно читать .img и, например, делать его просмотр(на форму в делфи или еще куда-нибудь).
Файлы прикрепил
Файл
Зеркало 1
Зеркало 2
Зеркало 3
Зеркало 4



Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 26 марта 2010 00:20 · Поправил: _ruzmaz_
· Личное сообщение · #2

не просто похожи)
.img - это тот же самый бмп, но без заголовка и палитры (что плохо)

кстати, что на фотке?))
// нло?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 26 марта 2010 03:34
· Личное сообщение · #3

они все 8ми битные наверное и палитра используется по умолчанию
грузи этот img просто в растр TBitmap'а и выводи куда хочешь

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 марта 2010 17:03
· Личное сообщение · #4

Isaev пишет:
грузи этот img просто в растр TBitmap'а и выводи куда хочешь


А как? Приведи пример



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 26 марта 2010 19:40
· Личное сообщение · #5

Isaev пишет:
грузи этот img просто в растр TBitmap'а и выводи куда хочешь

мну кажется что что TBitmap не позволит грузить изображение в котором нет заголовка и палитры. для начала их нужно как то добавить по умолчанию.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 26 марта 2010 21:35
· Личное сообщение · #6

лентяй ты, там нет ничего сложного
www.efg2.com/Lab/ImageProcessing/Scanline.htm тут почитай для общего развития...

Code:
  1. Procedure TForm1.FormActivate(Sender:TObject);
  2. Var
  3.   X,Y:Integer;
  4.   Table:Array[0..W-1] Of Byte;
  5.   Row:pByteArray;
  6.   Bmp:TBitmap;
  7.   S:TMemoryStream;
  8. Begin
  9.   Image1.Width:=W;
  10.   Image1.Height:=H;
  11.   Image1.Picture.Bitmap.Width:=W;
  12.   Image1.Picture.Bitmap.Height:=H;
  13.  
  14.   S:=TMemoryStream.Create;
  15.   S.LoadFromFile('Image2d.img');
  16.   S.Position:=0;
  17.  
  18.   Bmp:=TBitmap.Create;
  19.   Bmp.Width:=W;
  20.   Bmp.Height:=H;
  21.   Bmp.PixelFormat:=pf8bit;
  22.   For Y:=0 To H-1 Do
  23.     Begin
  24.       S.ReadBuffer(Table,W);
  25.       Row:=pByteArray(Bmp.Scanline[Y]);
  26.       For X:=0 To W-1 Do
  27.         Row[X]:=Table[X];
  28.     End;
  29.   Image1.Picture.Graphic:=Bmp;
  30.   Bmp.Free;
  31.   S.Free;
  32. End;


-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 марта 2010 22:16 · Поправил: Mavlyudov
· Личное сообщение · #7

Isaev
Благодарю. А чему ты задал параметры W и H ? Не произвольно же взял?
Для того сохраненного bmp это W=1392; H=1032;
Нужно как-то их считать для этого .img.
И еще странный факт: с параметром pf8bit рисует с нормальными пропорциями,
а вот с параметром pf24bit изображение становится вытянутым.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 26 марта 2010 23:00
· Личное сообщение · #8

взял из свойств bmp файла... в img нет этой информации
и палитру надо брать из bmp тоже, т.к. тут не стандартная

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 226.0 (наставник), 67thx
Активность: 0.160
Статус: Участник

Создано: 26 марта 2010 23:04 · Поправил: SergX
· Личное сообщение · #9

Mavlyudov пишет: И еще странный факт
нет тут ничего странного.

Mavlyudov, выложи один рисунок в формате BMP и IMG.

З.Ы. sorry, есть два файла, просто в архив залез пока тот не докачался.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 26 марта 2010 23:11
· Личное сообщение · #10

Mavlyudov пишет:
Нужно как-то их считать для этого .img.

а как ты их считать собрался?
ну раскладывай размер файла на простые множители и ищи все возможные пары

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 156.2 (ветеран), 2thx
Активность: 0.090
Статус: Участник

Создано: 26 марта 2010 23:20 · Поправил: Mavlyudov
· Личное сообщение · #11

Isaev

Вот, кстати, ты допусти 2 ошибки. И очень серьезные.
Вот более менее правильный код

Code:
  1. procedure TForm1.BitBtn1Click(Sender: TObject);
  2. const W=1392;
  3. H=1032;
  4. Var
  5.   X,Y:Integer;
  6.   Table:Array[0..W-1] Of Byte;
  7. //  Row:pByteArray;
  8.   Bmp:TBitmap;
  9.   S:TMemoryStream;
  10. type
  11.          RGB=Record
  12.          b,g,r: Byte;
  13.          End;
  14. type
  15.   TPixels=Array[0..0] of RGB;
  16.          PPixels= ^TPixels;
  17. var
  18.   Row: PPixels;
  19. Begin
  20.   Image1.Width:=W;
  21.   Image1.Height:=H;
  22.   Image1.Picture.Bitmap.Width:=W;
  23.   Image1.Picture.Bitmap.Height:=H;
  24.   S:=TMemoryStream.Create;
  25.   S.LoadFromFile('Image2d.img');
  26.   S.Position:=0;
  27.   Bmp:=TBitmap.Create;
  28.   Bmp.PixelFormat:=pf24bit;
  29.   Bmp.Width:=W;
  30.   Bmp.Height:=H;
  31.  
  32.   For Y:=0 To H-1 Do
  33.     Begin
  34.       S.ReadBuffer(Table,W);
  35.       Row:=Bmp.Scanline[Y];
  36.       For X:=0 To W-1 Do
  37.        begin
  38.         Row^[X].r:=Table[X];
  39.         Row^[X].g:=Table[X];
  40.         Row^[X].b:=Table[X];
  41.        end;
  42.     End;
  43.   Image1.Picture.Graphic:=Bmp;
  44.   Bmp.Free;
  45.   S.Free;
  46. End;


ОДна ошибка в том, что ты пишешь формат после задания размера:
Bmp.Width:=W;
Bmp.Height:=H;
Bmp.PixelFormat:=pf24bit;

А надо до, как у меня.
Вторую ошиибку видно итак




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 марта 2010 00:02
· Личное сообщение · #12

1. в данном случае последовательность не имеет значения абсолютно...
2. а что у тебя из проги выходят все картинки в градациях серого ты не говорил!

главное разобрался ведь!

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 114.8 (ветеран), 41thx
Активность: 0.10
Статус: Участник

Создано: 27 марта 2010 09:39
· Личное сообщение · #13

Isaev пишет:
взял из свойств bmp файла... в img нет этой информации

да тут лучше сразу бмп читать), если он всегда создается
Isaev пишет:
ну раскладывай размер файла на простые множители и ищи все возможные пары

с учетом того, что каждый блок данных, описывающий одну строку изображения, дополняется нулями до размера, кратного 4


 eXeL@B —› Оффтоп —› расшифровка картинки

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0

   Для печати Для печати