Как Создать Gdiplus:: Битовый массив от HBITMAP, сохраняя информацию об альфа-канале?

  public function ajax_chats($id)
    {   

    $user_id = $this->session->userdata('UserId');        
    $list = $this->users->get_msg_byid($id);
    $data = array();
    foreach ($list as $users) 
    {
        $chat_time = $users->SendDate;
        $time = date('H:i', $chat_time);
        $row = array();
       if($users->SenderId==$user_id && $users->RecieverId==$id){
        $row[] = '<div class="darker"><span class="time-left">'.$time.'</span> 
         <span class="text-right"><p>'. $users->Content.'</p></div>';}
        if($users->SenderId==$id && $users->RecieverId==$user_id){
        $row[] = '<div class="lighter"><span class="time-right">'.$time.'</span> 
        <p>'. $users->Content.'</p></div>';
        }
        $data[] = $row;
    }

    $output =  $data;
   echo json_encode($output);

   }
7
задан Kris Erickson 6 February 2009 в 20:13
поделиться

1 ответ

Оказывается, что GDI + никогда не приносит через альфа-канал при создании Битового массива из HBITMAP.

Ответ к:

  • Используйте передачу GetObject в БИТОВОМ МАССИВЕ и HBITMAP, для получения ширины и высоты (и если входным битовым массивом является DIB, пиксельные данные) входа HBITMAP.
  • Создайте Битовый массив корректного размера с форматом пикселя PARGB на 32 бита.
  • Используйте LockBits для овладения pixelData памятью нового Битового массива.
  • Если Вы получили пиксели от GetObject, скопируйте значения ARGB через использование memcpy.
  • Назовите UnlockBits на новом Битовом массиве.

В моем случае формате входа HBITMAP корректен для того, чтобы сделать прямой memcpy от входных растровых пиксельных данных до новых Растровых пиксельных данных.

Если Вы не получили данные входного пикселя GetObject, используйте GetDIBits для получения копии в правильном формате.

5
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: