Как создать bmp файл с текстовой строкой?

Тема в разделе "WASM.BEGINNERS", создана пользователем LittleFox, 1 апр 2008.

  1. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Всем привет!
    Подскажите пожалуйста как сохранить текстовую сторку в bmp файле с использованием апи, есть ряд параметров: текст, шрифт, размер шрифта, цвет шрифта и цвет фона.
    Если возможно пример кода на си или асме
     
  2. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    если нет примеров кода, объясните теоретически плз:)
     
  3. masm32

    masm32 New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2008
    Сообщения:
    147
    1. бмп - выводишь в окошко
    2. создаёшь едит (можно и с прозрачным бэкграундом) в том месте, где нужна надпись
    3. печатаешь, что надо
    4. снимаешь скриншот того, чего надо
    5. создаёшь новый бмп-файл
    6. заменяешь старый файл на новый
    7. с чувством глубокого удовлетворения ... выпиваешь чашечку кофэ

    Всё, что нужно, есть - http://www.wasm.ru/srclist.php
     
  4. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Хотелось бы сделать без окон и дверей в виде утилиты, должны же быть механизмы апи gdi или gdiplus
    Например так:
    1 создаю чистый бмп в памяти
    2 указываю фон
    3 указываю цвет текста
    4 пишу строку
    5 сохраняю в файл
    примерно так
     
  5. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    LittleFox
    1) берешь исходники PaintView
    2) добавляешь туда вывод текста с помощью TextOut
    (только не спрашивай как - сам что-то сделай уж)
    3) наслаждаешься
     
  6. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Нужно обойтись без создания окон, есть ли такие механизмы?
     
  7. masm32

    masm32 New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2008
    Сообщения:
    147
    ... Окна - это интерфейс для отображение чего-то.
    Не отображай. Возникнут некоторые проблемы, в принципе разрешимые... Тебе нужна готовая утилита? Моё время стоит всего 10 у.е в час ... готов рассмотреть предложения.
     
  8. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Я эту утилиту хочу сделать сама, примеры которые я нашла в сети сначала рисуют строку на экране, а потом сохраняют ее, я же ищу способ программно сделать тоже самое.
     
  9. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Спаммить решил?
     
  10. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Нет, откуда такие мысли? Там вроде наоборот надо :)
     
  11. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141
  12. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Вроде то что нужно, выложу что получится:)
     
  13. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    сночало надо заполнить BITMAPINFOHEADER, BITMAPFILEHEADER
    потом
    GetDC, CreateCompatibleDC, BitBlt, CreateDIBSection -> hBMP
    SelectObject(DC_Returned_by_CreatecompartibleDC, hBMP)
    а дальше уж чо угодно.. у меня было CreatePenIndirect, SelectObject(...pen), Rectangle, DrawText

    после этого создаем файл, пишем туда BITMAPFILEHEADER, BITMAPINFOHEADER, и кусок памяти, указатель на который получаецо из CreateDIBSection
     
  14. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Примеры temp666 оказались крайне полезны, большое спасибо.
    Вот что у меня получилось
     
  15. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    В примере получилось слишком много ассемблерного кода, может кто подскажет: есть ли какой-то способ сократить код, используя только API?
     
  16. temp666

    temp666 New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2007
    Сообщения:
    141
  17. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Собираюсь на си++ переписать, а там этот код не очень красиво будет смотреться, наверника должны быть функции которые все сами заполняют и копируют:)
     
  18. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    LittleFox, запихни в lib, и оттуды юзай ;)
     
  19. LittleFox

    LittleFox New Member

    Публикаций:
    0
    Регистрация:
    1 апр 2008
    Сообщения:
    36
    Вот есть пример где почти одни апи, все красиво, передалать на любой вкус можно, а там (text2bmp) сохранение бмп вручную сделано, мне кажется что есть способы с апи
     
  20. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    LittleFox
    Вы же видите, что в Вашем втором примере GDI+ используется. Вот и используйте. Только энкодер image/bmp, а не image/gif. Чтобы получить GDI+'овский битмап из GDI'евского, пользуетесь GdipCreateBitmapFromHBITMAP. Для оформления шрифта одной апи можно использовать ChooseFontA, а не руками заполнять. Для выбора цвета ChooseColorA. Думаю, что в двадцать строк кода уложитесь.