|
|
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Глупый вопрос. Есть у меня массив цветов. Мне нужно из этого массива создать Bitmap. Читаю описание функций CreateBitmap()/CreateBitmapIndirect() авторThe CreateBitmap function can be used to create color bitmaps. However, for performance reasons applications should use CreateBitmap to create monochrome bitmaps and CreateCompatibleBitmap to create color bitmaps .Подскажите, пожалуйста, как через CreateCompatibleBitmap передать мой массив? Еще я, что-то похожее вижу в CreateDIBSection() С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 00:09 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, через CreateCompatible... - никак, он DDB для буферизации отрисовки. CreateDIBSection или CreateDIBitmap, разница несущественная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 00:13 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 13:29 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Вопрос такой: Код: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Вызов: Код: pascal 1. Получаю черный прямоугольник указанного размера. Что я делаю не так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 16:26 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Что я делаю не так? Ты в дизайн-тайме засунул в Image1.Picture не .BMP-файл, очевидно же! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:07 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
КвейдТы в дизайн-тайме засунул в Image1.Picture не .BMP-файл, очевидно же!Я в дизайнтайме ничего не засовывал. А потом смотрю код Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:13 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, да, в общем все. Во-первых, в GDI присутствует некая багофича, вследствие которой память под DIB-карту должна непременно выделяться виндовым менеджером (GlobalAllocPtr(... )) и непременно отдельным дескриптором. Иначе получается то, что получается. Во-вторых, для такого заполнения должно быть biBitCount := 32; В- третьих, в карте другой порядок байтов по сравнению с палитрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:15 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисдолжно быть biBitCount := 32;Проверял. Ничего не меняется Соколинский Бориспамять под DIB-карту должна непременно выделяться виндовым менеджером (GlobalAllocPtr(... )) и непременно отдельным дескриптором.Сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:16 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Я повторил твой пример у себя на компе, только предварительно загрузив .BMP-файл в Image1.Picture. Все сработало ожидаемо, получили вертикальное полосы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:17 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
КвейдВсе сработало ожидаемо, получили вертикальное полосы.А должен получиться прямоугольник синего цвета Соколинский Борис, Что-то опять не взлетело Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:32 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисв карте другой порядок байтов по сравнению с палитрой.Так я же заполняю структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:33 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Еще и AV на закрытииВру. AV пропал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:35 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Проще самому написать Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 17:46 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисПроще самому написатьЕще раз спасибо. Нашел ошибку в своем коде. Т.к. у меня ABitmap был пустой, то он возвращал какой-то левый контекст. Нужно было, либо перед вызовом ABitmap.Canvas.Handle, вызвать ABitmap.SetSize(1, 1), либо получить его через GetDC(0). Еще вопрос - зачем это? Соколинский Борис Код: pascal 1. Чтобы привязаться к biBitcount? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:13 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Еще вопрос - зачем это? Длина строки в байтах должна быть кратна 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:22 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисДлина строки в байтах должна быть кратна 4.Спасибо. И еще вопрос Соколинский Бориспамять под DIB-карту должна непременно выделяться виндовым менеджером (GlobalAllocPtr(... ))Заменил PRGBTriple на array of TRGBTriple + SetLength() - все работает. Где-то грабли будут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:31 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Где-то грабли будут? При больших размерах картинки. Хотя именно в этом способе может ничего и не будет, будет точно если StretchDIBits использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 18:35 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Т.к. у меня ABitmap был пустой, то он возвращал какой-то левый контекст. Забыл отметить - это еще один косяк GDI. Для DIB-ов HDC нужен только чтобы считать палитру с контекста в случае если используется DIB_RGB_COLORS, в противном случае он никак не используется. Но WinAPI почему-то всегда требует валидный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 19:04 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисДля DIB-ов HDC нужен только чтобы считать палитру с контекста в случае если используется DIB_RGB_COLORS, в противном случае он никак не используется. Но WinAPI почему-то всегда требует валидный.Спасибо еще раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 20:00 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
И еще вопрос в контексте многопоточности. Могу ли я получить один раз GetDC(0), записать его в глобальную переменную, а потом без всякой синхронизации передавать этот контекст в CreateDIBitmap, вызываемой в разных потоках? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 21:47 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Теоретически можно. А практически... не вижу смысла создавать потенциальную уязвимость, когда без нее запросто можно обойтись, вызывая GetDC из потока, что совершенно корректно и не накладно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2016, 23:32 |
|
||
|
Создание Bitmap
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Доброго времени суток. У меня всё работет вот так вот Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.03.2019, 15:07 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39254525&tid=2039647]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
407ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 717ms |

| 0 / 0 |
