Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 19.11.2009, 19:03   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Запись....Ок. Чтение....Fail :(

Код:
var
  Form1: TForm1;
    ImArr: Array[0..26] of ShortString =
  ('ABTD','ABTL','CLSD','CLSL','DDPD','DDPL','DOWN','DUPD','DUPL',
   'HLPD','HLPL','HSTD','HSTL','LEFT','MIDDLE','MNMD','MNML','RIGHT',
   'SAYD','SAYL','STND','STNL','UDPD','UDPL','UP','UUPD','UUPL');
implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);
Var
I:Byte;
X,Y:SmallInt;
N:Array[0..15] of Integer;
F:File;
Bit:TBitMap;
begin
 AssignFile(F,'Palette.pal');
Reset(F,SizeOf(N));
Bit:=TBitMap.Create;
 For I:=0 to 26 do
  Begin
   BlockRead(F,N,1);
   Bit.LoadFromFile(ImArr[I]+'.bmp');
   For Y:=0 to Bit.Height - 1 do
    For X:=0 to Bit.Width - 1 do
     Begin
      If Bit.Canvas.Pixels[X,Y] = N[ 0] Then Bit.Canvas.Pixels[X,Y] := $000000 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 1] Then Bit.Canvas.Pixels[X,Y] := $000080 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 2] Then Bit.Canvas.Pixels[X,Y] := $0000FF Else
      If Bit.Canvas.Pixels[X,Y] = N[ 3] Then Bit.Canvas.Pixels[X,Y] := $800000 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 4] Then Bit.Canvas.Pixels[X,Y] := $800080 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 5] Then Bit.Canvas.Pixels[X,Y] := $008000 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 6] Then Bit.Canvas.Pixels[X,Y] := $FF0000 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 7] Then Bit.Canvas.Pixels[X,Y] := $008080 Else
      If Bit.Canvas.Pixels[X,Y] = N[ 8] Then Bit.Canvas.Pixels[X,Y] := $FF00FF Else
      If Bit.Canvas.Pixels[X,Y] = N[ 9] Then Bit.Canvas.Pixels[X,Y] := $808000 Else
      If Bit.Canvas.Pixels[X,Y] = N[10] Then Bit.Canvas.Pixels[X,Y] := $808080 Else
      If Bit.Canvas.Pixels[X,Y] = N[11] Then Bit.Canvas.Pixels[X,Y] := $00FF00 Else
      If Bit.Canvas.Pixels[X,Y] = N[12] Then Bit.Canvas.Pixels[X,Y] := $00FFFF Else
      If Bit.Canvas.Pixels[X,Y] = N[13] Then Bit.Canvas.Pixels[X,Y] := $C0C0C0 Else
      If Bit.Canvas.Pixels[X,Y] = N[14] Then Bit.Canvas.Pixels[X,Y] := $FFFF00 Else
      If Bit.Canvas.Pixels[X,Y] = N[15] Then Bit.Canvas.Pixels[X,Y] := $FFFFFF Else
      ShowMessage('Неясный цвет! Ищи ошибку!');
     End;
   Bit.SaveToFile('D:\Alius\Новая папка\Новая папка\Новая папка\'+ImArr[I]+'Temp.bmp');
  End;
 CloseFile(F);
 Bit.Free;
end;

procedure TForm1.Button3Click(Sender: TObject);
Var
N:Array[0..15] of Integer;
F:File;
X,Y:SmallInt;
I:Byte;
Bit:TBitMap;
begin
AssignFile(F,'Palette.pal');
Reset(F,Sizeof(N));
Bit:=TBitMap.Create;
For I:=0 to 26 do
 Begin
  BlockRead(F,N,1);
  Bit.LoadFromFile('D:\Alius\Новая папка\Новая папка\Новая папка\'+ImArr[I]+'Temp.bmp');
   For Y:=0 to Bit.Height - 1 do
    For X:=0 to Bit.Width - 1 do
     Begin
  If Bit.Canvas.Pixels[X,Y] = $000000 Then Bit.Canvas.Pixels[X,Y] := N[ 0] Else
  If Bit.Canvas.Pixels[X,Y] = $000080 Then Bit.Canvas.Pixels[X,Y] := N[ 1] Else
  If Bit.Canvas.Pixels[X,Y] = $0000FF Then Bit.Canvas.Pixels[X,Y] := N[ 2] Else
  If Bit.Canvas.Pixels[X,Y] = $800000 Then Bit.Canvas.Pixels[X,Y] := N[ 3] Else
  If Bit.Canvas.Pixels[X,Y] = $800080 Then Bit.Canvas.Pixels[X,Y] := N[ 4] Else
  If Bit.Canvas.Pixels[X,Y] = $008000 Then Bit.Canvas.Pixels[X,Y] := N[ 5] Else
  If Bit.Canvas.Pixels[X,Y] = $FF0000 Then Bit.Canvas.Pixels[X,Y] := N[ 6] Else
  If Bit.Canvas.Pixels[X,Y] = $008080 Then Bit.Canvas.Pixels[X,Y] := N[ 7] Else
  If Bit.Canvas.Pixels[X,Y] = $FF00FF Then Bit.Canvas.Pixels[X,Y] := N[ 8] Else
  If Bit.Canvas.Pixels[X,Y] = $808000 Then Bit.Canvas.Pixels[X,Y] := N[ 9] Else
  If Bit.Canvas.Pixels[X,Y] = $808080 Then Bit.Canvas.Pixels[X,Y] := N[10] Else
  If Bit.Canvas.Pixels[X,Y] = $00FF00 Then Bit.Canvas.Pixels[X,Y] := N[11] Else
  If Bit.Canvas.Pixels[X,Y] = $00FFFF Then Bit.Canvas.Pixels[X,Y] := N[12] Else
  If Bit.Canvas.Pixels[X,Y] = $C0C0C0 Then Bit.Canvas.Pixels[X,Y] := N[13] Else
  If Bit.Canvas.Pixels[X,Y] = $FFFF00 Then Bit.Canvas.Pixels[X,Y] := N[14] Else
  If Bit.Canvas.Pixels[X,Y] = $FFFFFF Then Bit.Canvas.Pixels[X,Y] := N[15] Else
   ShowMessage('Неясный цвет! Ищи ошибку!');
   End;
  Bit.SaveToFile('D:\Alius\Новая папка\Новая папка\Новая папка\Новая папка\'+ImArr[I]+'.bmp');
 End;
CloseFile(F);
Bit.Free;
end;
На батон 2 - молчание, все файлы записались хорошо и не один пиксель не проFAIL мне свой цвет. Запускаю батон 3: почти на каждый пиксель: "Неясный цвет! Ищи ошибку!". Ищу... Но не нахожу.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 19.11.2009, 19:32   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А Bit.Monochrome чему равно?
А записывается правильно?
Вы проверяли на маленьком битмапе (4х4, например)?
mihali4 вне форума
Старый 19.11.2009, 20:16   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Поставил
Код:
If Bit.Monochrome Then ShowMessage('TRUE') Else ShowMessage('FALSE');
после каждой загрузки файла - значения везде FALSE.

Да в том то и дело, что записывает как-то странно - только 4 цвета, не смотря на то, что в исходной картинке 16 цветов (записанные в palette.pal, если бы это было не так, палитра записалась бы полупустой, ан нет, все значения массива заполнены - проверял отладчиком).

Вот, прилагаю образец того, что было и того, что стало:
Было:

Стало:

А по идее должна быть пестрой как попугай.
Изображения
Тип файла: bmp Down.bmp (13.2 Кб, 205 просмотров)
Тип файла: bmp DOWNTemp.bmp (14.1 Кб, 202 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 19.11.2009 в 20:24.
Alex Cones вне форума
Старый 19.11.2009, 21:03   #4
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Добавил код на ведение лога. Получил следующее:
(Даю отрезок, полный весит 5 кб):
Цитата:
Загрузил палитру
0 606060
1 686868
2 707070
3 797979
4 474747
5 404040
6 5A5A5A
7 393939
8 3D3D3D
9 747474
10 6D6D6D
11 656565
12 343434
13 252525
14 545454
15 000000
Загрузил изображение ABTD
Обрабатываю пиксель 0 0
Значение пиксела - 606060
Цвет пикселя был заменен на 000000
Обрабатываю пиксель 1 0
Значение пиксела - 606060
Цвет пикселя был заменен на 000000
Обрабатываю пиксель 2 0
Значение пиксела - 606060
Цвет пикселя был заменен на 000000
Обрабатываю пиксель 3 0
Значение пиксела - 686868
Цвет пикселя был заменен на 252525
Обрабатываю пиксель 4 0
Значение пиксела - 707070
Цвет пикселя был заменен на 545454
Обрабатываю пиксель 5 0
Значение пиксела - 707070
Цвет пикселя был заменен на 545454
Заменяет на какие-то "левые" цвета. Ощущение, что он переводит все в монохром не смотря на отключенный флаг.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Stilet; 20.11.2009 в 09:43.
Alex Cones вне форума
Старый 20.11.2009, 09:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Alex Cones
А скажи ка мне , дружок, что програма должна делать?
I'm learning to live...
Stilet вне форума
Старый 20.11.2009, 10:02   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

По нажатию на первый батон - заменить 16 цветов изображения согласно палитре на 16 стандартных виндовых цветов.
По нажатию. на второй - проделать обратную операцию.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 20.11.2009, 10:19   #7
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Удалось локализовать и решить проблему! Она заключалась в том, что после сохранения рисунка через фотошоп он самовольно поменял стандартную битмаповскую палитру (ту, которая в бмп). Решил так:
Код:
 If Bit.Canvas.Pixels[X,Y] = $000080 Then OutBit.Canvas.Pixels[X,Y] := N[ 3] Else
Результат:
Изображения
Тип файла: bmp DOWNTemp.bmp (51.8 Кб, 173 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 20.11.2009, 10:20   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ты знаешь, я бы тебе посоветовал от IFов отказаться и искать цвет в цикле проходом по массиву...
Можешь прикрепить сюда весь проект с картинками и прилагающимся?
I'm learning to live...
Stilet вне форума
Старый 20.11.2009, 10:24   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Можешь прикрепить сюда весь проект с картинками и прилагающимся?
Проблема решена, тему можно закрывать. Насчет If`оф подумаю. Но и с ними теперь работает прекрасно. Еще есть потребность в проекте?
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума
Старый 20.11.2009, 10:59   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ясно. Нет. Тему закрываю. )
I'm learning to live...
Stilet вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение\запись из файла Skrip Общие вопросы C/C++ 3 23.09.2009 19:05
VC++ файлы(чтение\запись) ("")(Э_Є)("") Общие вопросы C/C++ 3 16.06.2009 14:05
Чтение>сортировка>запись theFEAR Помощь студентам 1 22.04.2009 09:33
Чтение и запись FilMapping Micher85 Общие вопросы Delphi 0 28.10.2008 22:33
Запись и чтение сообщений Altera Работа с сетью в Delphi 6 13.04.2008 03:31